Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis Lua скрипт, внедряващ CAS (проверка и задаване)?

Ще бъдете добре по отношение на атомността според документацията на Redis:

Redis използва същия интерпретатор на Lua за изпълнение на всички команди. Също така Redis гарантира, че скриптът се изпълнява атомарно:никой друг скрипт или команда Redis няма да бъде изпълнена, докато скриптът се изпълнява. Тази семантика е подобна на тази на MULTI / EXEC. От гледна точка на всички останали клиенти ефектите от скрипта или все още не са видими, или вече са завършени.

Въпреки това, ако скриптът е твърде бавен, това причинява проблем. Така че скриптът е най-добрият за леки операции, които изискват известна логика и атомарност.

Друга вратичка, в която може да попаднете, е, че ако скриптът се провали по някакъв начин в средата, тези извиквания, които сте направили, не могат да бъдат върнати назад, въпреки че скриптът ще върне грешка.

Например:Имате скрипт като този:

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

Изпълнението на скрипта ще върне грешка, но foo вече е зададен в redis като 1 .

Нещо, което не е свързано с вашия въпрос:Забелязах, че сте използвали

eval "your_raw_code" key_count keys argv

всъщност можете да извикате файла lua скрипт в eval, когато сте в терминала:

> 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. Изпълнение на фонови задачи на Heroku само с 1 уеб динамометрия и 0 работни динамометра

  2. Redis намира хешове по стойности на полета

  3. възможно ли е да се извикат lua функции, дефинирани в други lua скриптове в redis?

  4. Отмяна на работни места в Laravel

  5. Паралелност на Redis INCR