sql >> Databáze >  >> NoSQL >> Redis

Skript Redis Lua implementující CAS (check-and-set)?

Podle Redisovy dokumentace budete z hlediska atomičnosti v pořádku:

Redis používá ke spuštění všech příkazů stejný interpret Lua. Redis také zaručuje, že skript je spouštěn atomickým způsobem:během provádění skriptu nebude spuštěn žádný jiný skript nebo příkaz Redis. Tato sémantika je podobná sémantice MULTI / EXEC. Z pohledu všech ostatních klientů efekty skriptu buď stále nejsou viditelné, nebo jsou již dokončeny.

Pokud je však skript příliš pomalý, způsobuje problémy. Skript je tedy nejlepší pro lehké operace, které vyžadují určitou logiku a atomicitu.

Další mezerou, do které se můžete dostat, je to, že pokud skript uprostřed nějak selhal, tato volání, která jste provedli, nelze vrátit zpět, ačkoli skript vrátí chybu.

Např.:Máte skript jako tento:

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

Spuštění skriptu vrátí chybu, ale foo již byl v redis nastaven jako 1 .

Něco, co nesouvisí s vaší otázkou:Všiml jsem si, že jste použili

eval "your_raw_code" key_count keys argv

ve skutečnosti byste mohli volat soubor skriptu lua v eval, když jste v terminálu:

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



  1. Co je MongoDB a jak funguje?

  2. MongoDB – Pusťte sbírku

  3. Jak funguje redis, aby vám pomohl setrvání v relaci v azurovém okně

  4. Max a min v mongodb