English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Transações Redis

As transações Redis podem executar vários comandos de uma vez e têm três garantias importantes:

  • As operações em lote são colocadas em cache na fila antes de enviar o comando EXEC.

  • Após receber o comando EXEC, entra na execução da transação, se qualquer comando na transação falhar, os outros comandos ainda serão executados.

  • Durante a execução da transação, as solicitações de comandos submetidas por outros clientes não serão inseridas na sequência de comandos de execução da transação.

Uma transação passa por três estágios a partir do início até a execução:

  • Inicie a transação.

  • Enfileire os comandos.

  • Execute a transação.

Exemplo online

A seguir está um exemplo de transação, que primeiro MULTI Inicie uma transação, em seguida, insira vários comandos na fila da transação, finalmente por EXEC Os comandos desencadeiam transações, executando todos os comandos da transação ao mesmo tempo:

redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-nome "Mastering C"++ em 21 dias"
QUEUED
redis 127.0.0.1:6379> GET book-nome
QUEUED
redis 127.0.0.1:6379> SADD tag "C"++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C"++ em 21 dias"
3) (inteiro) 3
4) 1) "Mastering Series"
   2) "C"++"
   3) "Programming"

A execução de um comando Redis é atomática, mas o Redis não adiciona nenhum mecanismo de manutenção de atomicidade em transações, então a execução de transações Redis não é atomática.

Os negócios podem ser compreendidos como um pacote de scripts de execução em lote, mas as instruções em lote não são operações atomizadas, a falha de uma instrução intermediária não causará o rollback das instruções executadas anteriormente, nem causará que as instruções subsequentes não sejam executadas.

Esta é a descrição na página oficial  From redis docs on transações:

É importante notar que mesmo quando um comando falha, todos os outros comandos na fila são processados – o Redis não parará o processamento de comandos.

Por exemplo:

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

Se falhar no set b bbb, o set a já foi bem-sucedido e não será desfeito, e o set c ainda continuará a ser executado.

Comandos de Transação Redis

A tabela a seguir lista os comandos relacionados a transações redis:

NúmeroComando e Descrição
1DISCARD
Cancelar a transação, abandonar a execução de todos os comandos dentro do bloco de transação.
2EXEC
Executar todos os comandos dentro do bloco de transação.
3MULTI
Marcar o início de um bloco de transação.
4UNWATCH
Cancelar o comando WATCH para todos os key.
5WATCH key [key ...]
Monitorar um (ou vários) key, se essa (ou essas) key for alterada por outro comando antes da execução da transação, a transação será interrompida.