sql >> Databasteknik >  >> NoSQL >> Redis

Redis Lua script implementerar CAS (check-and-set)?

Du kommer att klara dig bra när det gäller atomicitet enligt Redis dokumentation:

Redis använder samma Lua-tolk för att köra alla kommandon. Redis garanterar också att ett skript exekveras på ett atomärt sätt:inget annat skript eller Redis-kommando kommer att exekveras medan ett skript körs. Denna semantik liknar den för MULTI / EXEC. Från alla andra klienters synvinkel är effekterna av ett skript antingen fortfarande inte synliga eller redan färdiga.

Men om skriptet är för långsamt, orsakar det problem. Så script är det bästa för lätta operationer som kräver lite logik och atomicitet.

Ett annat kryphål du kan hamna i är att om skriptet på något sätt misslyckades i mitten, kunde de samtal du har gjort inte återställas, även om skriptet kommer att returnera fel.

T.ex.:Du har ett skript som detta:

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

Skriptkörningen kommer att returnera fel, men foo har redan ställts in i redis som 1 .

Något som inte har med din fråga att göra:Jag märkte att du använde

eval "your_raw_code" key_count keys argv

faktiskt kan du anropa lua-skriptfilen i eval när du är i terminalen:

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



  1. MongoDB Aggregations med Java

  2. Vilka är användningsfallen där Redis föredras framför Aerospike?

  3. Operativ databassäkerhet – Del 1

  4. Redis Update Sorterad Set vid Key Expire