Cheatsheet

Como Executar Transações no Redis

Published on March 23, 2020
Português
Como Executar Transações no Redis

Introdução

O Redis é um datastore ou armazenamento de dados open-source de chave-valor na memória. O Redis lhe permite planejar uma sequência de comandos e executá-los um após o outro, um procedimento conhecido como transação. Cada transação é tratada como uma operação ininterrupta e isolada, o que garante a integridade dos dados. Os clientes não podem executar comandos enquanto um bloco de transação está sendo executado.

Este tutorial aborda como executar e cancelar transações e também inclui algumas informações sobre as armadilhas comumente associadas às transações.

Como Utilizar Este Guia

Este guia está no formato de referência rápida com trechos de linha de comando independentes. Recomendamos que você pule para qualquer seção que seja relevante para a tarefa que você está tentando concluir.

Os comandos mostrados neste guia foram testados em um servidor Ubuntu 18.04 executando a versão 4.0.9 do Redis. Para configurar um ambiente semelhante, você pode seguir o Passo 1 do nosso guia Como Instalar e Proteger o Redis no Ubuntu 18.04. Vamos demonstrar como esses comandos se comportam executando-os com redis-cli, a interface de linha de comando do Redis. Observe que se você estiver usando uma interface Redis diferente — Redli, por exemplo — a saída exata de certos comandos pode ser diferente.

Como alternativa, você pode provisionar uma instância de banco de dados Redis gerenciada para testar esses comandos, mas observe que, dependendo do nível de controle permitido pelo seu provedor de banco de dados, alguns comandos neste guia podem não funcionar como descrito. Para provisionar um banco de dados gerenciado na DigitalOcean, siga nossa documentação de produto para Managed Databases. Então, você deve instalar ou o Redli ou configurar um túnel TLS para conectar-se ao banco de dados gerenciado por TLS.

Executando Transações

O comando multi diz ao Redis para iniciar um bloco de transação. Quaisquer comandos subsequentes serão colocados na fila até você executar um comando exec, que os executará.

Os seguintes comandos formam um único bloco de transação. O primeiro comando inicia a transação, o segundo define uma chave contendo uma string com o valor de 1, o terceiro incrementa o valor em 1, o quarto incrementa seu valor em 40, o quinto retorna o valor atual da string e o último executa o bloco de transação:

  1. multi
  2. set key_MeaningOfLife 1
  3. incr key_MeaningOfLife
  4. incrby key_MeaningOfLife 40
  5. get key_MeaningOfLife
  6. exec

Depois de executar o multi, o redis-cli responderá a cada um dos seguintes comandos com QUEUED. Depois de executar o comando exec, ele mostrará a saída de cada um desses comandos individualmente:

Output
1) OK 2) (integer) 2 3) (integer) 42 4) "42"

Os comandos incluídos em um bloco de transação são executados sequencialmente na ordem em que estão enfileirados. As transações Redis são atômicas, o que significa que todos os comandos em um bloco de transações são processados (ou seja, são aceitos como válidos e enfileirados para serem executados) ou nenhum deles. No entanto, mesmo que um comando seja enfileirado com êxito, ele ainda poderá gerar um erro quando executado. Nesses casos, os outros comandos da transação ainda podem ser executados, mas o Redis ignorará o comando causador de erros. Consulte a seção compreendendo erros de transação para mais detalhes.

Cancelando Transações

Para cancelar uma transação, execute o comando discard. Isso impede que qualquer comando previamente enfileirado seja executado:

  1. multi
  2. set key_A 146
  3. incrby key_A 10
  4. discard
Output
OK

O comando discard retorna a conexão ao estado normal, o que instrui o Redis a executar comandos únicos, como de costume. Você precisará executar o multi novamente para informar ao servidor que está iniciando outra transação.

Entendendo Erros de Transação

Alguns comandos podem ser impossíveis de enfileirar, como comandos com erros de sintaxe. Se você tentar enfileirar um comando sintaticamente incorreto, o Redis retornará um erro.

A transação a seguir cria uma chave chamada key_A e depois tenta incrementá-la em 10. No entanto, um erro de ortografia no comando incrby gera um erro e fecha a transação:

  1. multi
  2. set key_A 146
  3. incrbuy key_A 10
Output
(error) ERR unknown command 'incrbuy'

Se você tentar executar um comando exec depois de tentar enfileirar um comando com um erro de sintaxe como esse, você receberá outra mensagem de erro informando que a transação foi descartada:

  1. exec
Output
(error) EXECABORT Transaction discarded because of previous errors.

Em casos como este, você precisará reiniciar o bloco de transações e certificar-se de inserir cada comando corretamente.

Alguns comandos impossíveis são possíveis de se enfileirar, como executar incr em uma chave que contém apenas uma string. Como esse comando é sintaticamente correto, o Redis não retornará um erro se você tentar incluí-lo em uma transação e não impedirá que você execute o exec. Em casos como este, todos os outros comandos na fila serão executados, mas o comando impossível retornará um erro:

  1. multi
  2. set key_A 146
  3. incrby key_A "ten"
  4. exec
Output
1) OK 2) (error) ERR value is not an integer or out of range

Para mais informações sobre como o Redis lida com erros dentro de transações, consulte a documentação oficial sobre o assunto.

Conclusão

Este guia detalha vários comandos usados para criar, executar e cancelar transações no Redis. Se houver outros comandos, argumentos ou procedimentos relacionados que você gostaria de ver descritos neste guia, peça ou faça sugestões nos comentários abaixo.

Para obter mais informações sobre comandos Redis, consulte nossa série de tutoriais Como Gerenciar um Banco de Dados Redis.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.