Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Skrypt Redis Lua implementujący CAS (sprawdź i ustaw)?

Zgodnie z dokumentacją Redis, wszystko będzie w porządku pod względem atomowości:

Redis używa tego samego interpretera Lua do uruchamiania wszystkich poleceń. Redis gwarantuje również, że skrypt jest wykonywany w sposób niepodzielny:żaden inny skrypt ani polecenie Redis nie zostanie wykonane podczas wykonywania skryptu. Ta semantyka jest podobna do tej z MULTI / EXEC. Z punktu widzenia wszystkich innych klientów efekty działania skryptu są albo wciąż niewidoczne, albo już zakończone.

Jednakże, jeśli skrypt jest zbyt wolny, powoduje to problem. Skrypt jest więc najlepszy do lekkich operacji, które wymagają pewnej logiki i atomizacji.

Inną luką, w którą możesz wpaść, jest to, że jeśli skrypt w jakiś sposób zawiódł, wywołania, które wykonałeś, nie mogą zostać wycofane, chociaż skrypt zwróci błąd.

Np.:Masz taki skrypt:

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

Wykonanie skryptu zwróci błąd, ale foo został już ustawiony w redis jako 1 .

Coś niezwiązanego z Twoim pytaniem:zauważyłem, że użyłeś

eval "your_raw_code" key_count keys argv

właściwie możesz wywołać plik skryptu lua w eval, gdy jesteś w terminalu:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przechowywanie zagnieżdżonych obiektów JavaScript w redis - NodeJS

  2. Zasubskrybuj ponownie Flask-SocketIO

  3. Podziel ciąg po znaku w Lua

  4. Jak przechowywać złożony zagnieżdżony JSON w Redis za pomocą Pythona?

  5. Koncepcja Redis:w pamięci czy w DB?