Armazenamento de bloqueio (lock) com base no PDO adicionado no Symfony 4.2

Andréia Bohner
Dec 16, 2018 · 2 min read

O Componente Lock foi introduzido no Symfony 3.4 para criar e gerenciar bloqueios (locks), um mecanismo para fornecer acesso exclusivo a um recurso compartilhado. Ele já suporta diferentes armazenamentos para locks locais (arquivos, semáforos) e locks distribuídos (Memcache, Redis). No Symfony 4.2, foi adicionado um novo armazenamento de lock baseado no PDO.

Isso faz sentido porque a maioria das aplicações Symfony já usam o MySQL/MariaDB ou PostgreSQL para persistência de dados. No entanto, esse novo armazenamento não depende dos mecanismos de lock desses bancos de dados (pg_advisory_lock_shared para PostgreSQL e GET_LOCK para MySQL/MariaDB) porque eles não são confiáveis o suficiente. Eles dependem da conexão TCP e precisam ajustar o mecanismo do banco de dados para não aceitar novas conexões após uma reinicialização ou para definir um tempo limite de conexão maior que a duração máxima do lock.

A nova classe PdoStore requer um objeto PDO, um objeto de conexão DBAL do Doctrine ou uma string DSN (Data Source Name) para configurar o armazenamento:

use Symfony\Component\Lock\Store\PdoStore;

// a PDO, a Doctrine DBAL connection or DSN for lazy connecting through PDO
$databaseConnectionOrDSN = 'mysql:host=127.0.0.1;dbname=lock';
$store = new PdoStore($databaseConnectionOrDSN, [
'db_username' => 'myuser',
'db_password' => 'mypassword'
]);

Em seguida, crie a tabela que armazena as informações de lock. Você pode usar o método createTable() da classe PdoStore para fazer isso:

try {
$store->createTable();
} catch (\PDOException $exception) {
// the table could not be created for some reason
}

Agora você pode criar e gerenciar locks baseados em PDO, conforme explicado nos documentos de qualquer outro tipo de lock.

Tradução de: New in Symfony 4.2: PDO-based lock storage

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store