Rails.cache如何同时增加和过期

时间:2018-12-05 18:21:04

标签: ruby-on-rails caching

我看到Redis不允许同时创建incrementexpiration。我分两步解决了这个问题:

my_redis_client.incrby( key, amount )
my_redis_client.expire( key, expire_time )

但是,如果我想使用Rails.cache,我不知道如何以最佳方式获得相同的结果。

如果我这样做:

Rails.cache.increment( key, amount, :expires_in => expire_time )

expires_in被完全忽略。

是否可以使用Rails.cache设置到期时间并执行递增操作?

3 个答案:

答案 0 :(得分:2)

一种选择是对Rails.cache进行猴子补丁,即

module CacheSupport
  def increment_with_ttl(key, amount, ttl)
    increment(key, amount)
    expire(key, ttl)
  end
end

Rails.cache.extend(CacheSupport)

将其放在initializer文件夹中,然后您就可以开始在项目中使用Rails.cache.increment_with_ttl()

答案 1 :(得分:0)

类似于Rails 5.2中的:

Rails.cache.increment( key, amount, :expires_in => expire_time )

按预期工作:

答案 2 :(得分:0)

这是在Rails 5.2中为我工作的

Rails.cache.write(key, 0, :raw => true, :unless_exist => true, :expires_in => expire_time)
Rails.cache.increment( key, amount )