Атомарные операции Redis с JSON

#python #node.js #database #redis

#python #node.js #База данных #redis

Вопрос:

Я хочу сохранить довольно сложный объект JSON в Redis, но я не вижу, как я могу сделать транзакцию атомарной, поскольку мне нужно будет получить, отредактировать, а затем установить. За время, необходимое для редактирования, мог быть вызван другой get в другом месте, который в конечном итоге перезапишет мои данные.

Я просмотрел конвейеры, но, похоже, они не будут полезны, потому что команды выполняются одновременно? Невозможно проанализировать / отредактировать перед набором?

Я также не могу найти способ заблокировать документ / хэш во время этого процесса.

Комментарии:

1. Не могли бы вы подробнее рассказать?

Ответ №1:

Здесь у вас есть три варианта:

  1. Используйте транзакции Redis:
 WATCH mykey
GET mykey
// change the JSON
MULTI
SET mykey
EXEC
 
  1. Используйте сценарий Lua:
  2. Используйте модуль Redis RedisJSON, который поддерживает атомарные команды, такие как:

JSON.ARRINSERT amp; JSON.NUMINCRBY

Комментарии:

1. Спасибо за это, я пошел с RedisJSON, и он идеально подходит для моих нужд.