我看到Redis不允许同时创建increment
和expiration
。我分两步解决了这个问题:
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
设置到期时间并执行递增操作?
答案 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 )