sql >> Base de Datos >  >> NoSQL >> Redis

¿Script Redis Lua que implementa CAS (verificar y configurar)?

Estará bien en términos de atomicidad según la documentación de Redis:

Redis usa el mismo intérprete de Lua para ejecutar todos los comandos. Además, Redis garantiza que un script se ejecuta de forma atómica:no se ejecutará ningún otro script o comando de Redis mientras se ejecuta un script. Esta semántica es similar a la de MULTI / EXEC. Desde el punto de vista de todos los demás clientes, los efectos de un script aún no son visibles o ya se han completado.

Sin embargo, si el script es demasiado lento, causa problemas. Entonces, el script es el mejor para operaciones ligeras que requieren algo de lógica y atomicidad.

Otra laguna en la que podría caer es que, si la secuencia de comandos falla de alguna manera en el medio, las llamadas que ha realizado no se pueden revertir, aunque la secuencia de comandos devolverá un error.

Por ejemplo:tiene un script como este:

redis.call('set', 'foo', 1)
redis.call('rpush', 'foo', 2)

La ejecución del script devolverá un error, pero foo ya se ha establecido en redis como 1 .

Algo no relacionado con tu pregunta:noté que usaste

eval "your_raw_code" key_count keys argv

en realidad, podría llamar al archivo de script lua en eval cuando esté en la terminal:

> redis-cli eval "$(cat path/to/script/script_name.lua)" key_count keys argv