Saltar al contenido

Cómo ejecutar transacciones en Redis

marzo 4, 2020

 

Introducción

Redis es un código abierto, almacén de datos clave-valor en memoria. Redis le permite planificar una secuencia de comandos y ejecutarlos uno tras otro, un procedimiento conocido como una transacción . Cada transacción es tratado como un funcionamiento ininterrumpido y aislada, lo que asegura la integridad de datos. Los clientes no pueden ejecutar comandos cuando hay una transacción bloque está siendo ejecutado

Este tutorial va sobre cómo ejecutar y cancelar las transacciones, y también incluye algo de información sobre peligros comúnmente asociados con las transacciones.

Cómo utilizar esta guía

Esta guía está escrita como una hoja de trucos con ejemplos autónomos. Le animamos a saltar a cualquier sección que es relevante para la tarea que está tratando de completar.

Los comandos mostrados en esta guía fueron probados en un 18,04 servidor Ubuntu corriendo Redis versión 4.0.9. Para configurar un entorno similar, puede seguir Paso 1 de nuestra guía sobre cómo instalar y Secure Redis en Ubuntu 18.04. Vamos a demostrar cómo se comportan estos comandos ejecutando con Redis-cli, la interfaz de línea de comandos Redis. Tenga en cuenta que si usted está utilizando una interfaz diferente Redis – Redli, por ejemplo – la salida exacta de ciertos comandos pueden ser diferentes.

Como alternativa, puede aprovisionar una base de datos gestionada ejemplo Redis para probar estos comandos, pero tenga en cuenta que, dependiendo del nivel de control que le indique su proveedor de base de datos, algunos comandos de esta guía puede no w o k como se describe. Para aprovisionar una base de datos digitalocean administrados, siga nuestra documentación del producto Gestionados bases de datos. Entonces, se debe ya sea instalar Redli o establecieron un túnel TLS en o der para conectarse a la base de datos gestionada a través de TLS. Las transacciones en ejecución

El comando de múltiples dice Redis para iniciar un bloque de transacción. Cualquier comando posteriores se pondrán en cola hasta que se ejecute un comando exec, que ejecutarlos.

Los siguientes comandos forman un bloque de transacción individual. El primer comando inicia la transacción, el segundo establece una clave de la celebración de una cadena con el valor de 1, el tercer aumenta el valor en 1, el cuarto aumenta su valor en un 40, el quinto devuelve el valor actual de la cadena, y el último uno ejecuta el bloque de transacción:

multi
set key_MeaningOfLife 1
incr key_MeaningOfLife
incrby key_MeaningOfLife 40
get key_MeaningOfLife
exec

  • múltiples
  • establece key_MeaningOfLife 1
  • incr key_MeaningOfLife
  • incrby key_MeaningOfLife 40
  • llegar key_MeaningOfLife
  • ejecutivo

Después de ejecutar múltiples, Redis-cli responderá a cada uno de los siguientes comandos con cola. Después de ejecutar el comando exec, se mostrará la salida de cada uno de los mandatos de forma individual:

Output1) OK
2) (integer) 2
3) (integer) 42
4) "42"

comandos incluido en un bloque de transacción se ejecutan secuencialmente en el orden en que se ponen en cola. Redis transacciones son atómica , lo que significa que o bien todos los comandos en un bloque de transacción se procesa (lo que significa que se acepta como válido y cola para ser ejecutado) o no hay ninguno. Sin embargo, incluso si un comando se pone en cola con éxito, todavía puede producir un error cuando se ejecuta. En tales casos, las demás órdenes de la transacción todavía puede funcionar, pero Redis se saltará el comando de error que causan. Vea la sección de errores de transacción comprensión para más detalles.

Cancelación de Transacciones

para cancelar una transacción, ejecute el comando de descarte. Esto evita que cualquier comando en cola previamente de funcionamiento:

multi
set key_A 146
incrby key_A 10
discard

  • múltiples
  • establecen key_A 146
  • incrby key_A 10
  • descarta

OutputOK

Los descartes comando devuelve la conexión a un estado normal, que le dice Redis para ejecutar comandos individuales como siempre. Tendrá que correr de nuevo múltiples para indicar al servidor que está empezando otra transacción.

errores entendimiento de transacción

Algunos comandos pueden ser imposibles de hacer cola, como comandos con errores de sintaxis. Si intenta hacer cola un comando incorrecto sintácticamente Redis devolverá un error.

La siguiente transacción createst una clave denominada key_A e intenta luego incrementarlo en 10. Sin embargo, un error de ortografía en las causas de mando incrby y error y se cierra la transacción:

multi
set key_A 146
incrbuy key_A 10

  • múltiples
  • establece key_A 146
  • incrbuy key_A 10

Output(error) ERR unknown command 'incrbuy'

Si intenta ejecutar un comando exec después de intentar hacer cola un comando con un error de sintaxis como éste, recibirá otro mensaje de error que indica que la transacción se descartó:

exec

  • ejecutivo

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

en casos como este, tendrá que reiniciar el bloque de transacción y asegúrese de introducir cada comando correctamente.

Algunos comandos son imposibles posible cola, como correr incr en una clave que sólo contiene una cadena. Debido a que tal orden es sintácticamente correcta, Redis no devolverá un error si se intenta incluirlo en una transacción y no evitará que se ejecute Exec. En casos como este, todos los demás órdenes de la cola se ejecutarán, pero el comando imposible devolverá un error:

multi
set key_A 146
incrby key_A "ten"
exec

  • múltiples
  • establece key_A 146
  • incrby key_A “diez”
  • ejecutivo

Output1) OK
2) (error) ERR value is not an integer or out of range

Para obtener más información sobre cómo Redis controla los errores dentro de transacciones, consulte la documentación oficial sobre el tema.

Conclusión

Esta guía detalla una serie de comandos que se utilizan para crear, ejecutar y cancelar las transacciones en Redis. Si hay otros comandos relacionados, argumentos o procedimientos que le gustaría ver descrita en esta guía, por favor pregunte o hacer sugerencias en los comentarios a continuación.

Para obtener más información sobre los comandos Redis, ver nuestra serie de tutoriales sobre cómo gestionar una base de datos Redis.