Если тайм-аут redis во время операции SET, могут ли данные в базе данных redis быть изменены в любом случае? - PullRequest
0 голосов
/ 16 декабря 2011

Я использую redis для аналитики в приложении ruby ​​on rails, размещенном на heroku, и я думаю о том, как мне справиться с таймаутами redis. Тайм-ауты Redis не случаются слишком часто, но они случаются. Вот где я бы с ними справился:

begin
  Timeout::timeout(5) {
    # an operation that modifies data in redis db
  }
rescue Timeout::Error
  # do something
end

Мне интересно: если тайм-аут redis и выполнение выбрасываются в блок восстановления, возможно ли, что данные в базе данных redis были изменены во время этого? Есть ли гарантия, что он не был изменен (в этом случае я мог бы создать фоновое задание, чтобы повторить эту операцию позже)?

1 Ответ

0 голосов
/ 16 декабря 2011

Предполагая, что Redis получил команду, я не ожидал, что она откатится, если клиент не сможет получить ACK, и если я правильно понимаю исходный код, он не будет.Если вы не хотите, чтобы redis выполнялся в случае тайм-аута, вам нужно использовать транзакцию.

...