ruby-on-rails - 如果在SET操作期间redis超时,redis db中的数据是否已经被修改?

标签 ruby-on-rails transactions timeout redis

我在 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/

相关文章:

ruby-on-rails - 两级深度关联的 Active Admin 过滤器

ruby-on-rails - Sidekiq Redis 数据库 key 随时间增加

python - django 事务原子性..是信任吗?

mysql - 什么样的锁定/事务隔离级别适合这种情况?

mysql事务内的binlog是否保证表的更新顺序

ruby-on-rails - 如何在rails 3中的路由中设置默认参数值

ios - 使用 Doorkeeper & Devise 连接到 Rails API 时无法注销 iOS Swift 应用程序

java - JDBI 的查询超时

go - goroutines 和 Http 请求超时

Python SSL FTP 连接超时