Релиз Radix 0.6.0

Александр Толстой

Команда разработчиков Picodata рада сообщить о выпуске Radix 0.6.0 — коммерческого плагина к Picodata, реализующего Redis на базе СУБД Picodata. В новой версии существенно расширена поддержка транзакций и Lua-скриптов.

В частности, Radix 0.6.0 добавляет следующую функциональность Redis:

  • Полная поддержка Lua-скриптов:
    • eval:
      • redis.call
      • redis.pcall
      • redis.log
      • redis.sha1hex
      • redis.status_reply
      • redis.error_reply
      • redis.REDIS_VERSION
      • redis.REDIS_VERSION_NUM
    • evalro
    • evalsha
    • evalsharo
    • script exists
    • script load
  • поддержка транзакций:
    • exec
    • discard
    • watch
    • unwatch
    • multi

Транзакции и Lua-скрипты в Radix работают так же как в Redis, но в ряде случаев есть своя специфика. Так, транзакции можно начинать на любом сервере (но важно закончить в рамках одного соединения), а каждый Lua-скрипт воспринимается как атомарная единица: в случае невозможности исполнить хотя бы одну команду из скрипта, он не будет исполнен полностью.

Соблюдение гарантии атомарности при применении транзакций — важное преимущество Radix перед Redis. Покажем это на примере:

Поведение Redis 7.4 (часть скрипта применяется, несмотря на ошибку):

$ redis-cli -c -p 6300
127.0.0.1:6300> get my_key
-> Redirected to slot [13711] located at 172.19.0.7:6379
(nil)
172.19.0.7:6379> SCRIPT LOAD "redis.call('SET', KEYS[1], '321'); return redis.call('EVAL', 'return 123', 0)"
"aff82320ad7eadc3b4c30944d0c39edfe81357dd"
172.19.0.7:6379> evalsha aff82320ad7eadc3b4c30944d0c39edfe81357dd 1 my_key
(error) ERR This Redis command is not allowed from script script: aff82320ad7eadc3b4c30944d0c39edfe81357dd, on @user_script:1.
172.19.0.7:6379> get my_key
"321"
172.19.0.7:6379>

Поведение Radix 0.6.0 (ошибка предотвращается на этапе загрузки скрипта):

$ redis-cli -p 7301
127.0.0.1:7301> get my_key
(nil)
127.0.0.1:7301> SCRIPT LOAD "redis.call('SET', KEYS[1], '321'); return redis.call('EVAL', 'return 123', 0)"
(error) ERR This Redis command is not allowed from script script: eval, on @user_script
127.0.0.1:7301> get my_key
(nil)

Более подробное описание плагина Radix приведено на сайте документации Picodata.

Вопросы и пожелания направляйте в наш Telegram-чат @picodataru.