我在 heroku 上托管的 ruby on rails 应用程序中使用 redis 进行分析,我在考虑应该如何处理 redis 超时。 Redis 超时不会经常发生,但确实会发生。这是我处理它们的地方:
begin
Timeout::timeout(5) {
# an operation that modifies data in redis db
}
rescue Timeout::Error
# do something
end
我在想:如果redis超时执行抛到rescue block,有没有可能这期间redis db中的数据被修改了?是否可以保证它没有被修改(在这种情况下我可能会创建一个后台作业以稍后重试此操作)?
最佳答案
假设 Redis 收到命令,如果客户端无法接收到 ACK,我不希望它回滚,如果我正确理解源代码,它也不会回滚。如果你不想让redis在超时的情况下执行你需要使用事务。
关于ruby-on-rails - 如果在SET操作期间redis超时,redis db中的数据是否已经被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531492/