获取Rails缓存项的到期时间

时间:2016-10-05 08:18:02

标签: ruby-on-rails caching

在我的应用中的某个地方,我使用

Rails.cache.write 'some_key', 'some_value', expires_in: 1.week

在我的应用程序的另一部分中,我想弄清楚该缓存项目还剩多少时间。

我该怎么做?

3 个答案:

答案 0 :(得分:6)

这不是合法的方式,但是可以:

expires_at = Rails.cache.send(:read_entry, 'my_key', {})&.expires_at
expires_at - Time.now.to_f if expires_at

read_entry是受fetchreadexists?和其他方法使用的受保护方法,这就是我们使用send的原因。 / p>

如果根本没有条目,它可能会返回nil,因此将try与Rails一起使用,或者将&.用于安全导航,或者将.tap{ |e| e.expires_at unless e.nil? }用于旧红宝石。 / p>

因此,您将得到类似1587122943.7092931的信息。这就是为什么您需要Time.now.to_f。使用Rails,您还可以使用Time.current.to_f

答案 1 :(得分:2)

哇。我刚来这里寻找这个。可耻的答案是否定的。

我的解决方案,然后,我不是它的粉丝,也是缓存过期。

Rails.cache.write 'some_key', ['some_value', 1.week.from_now], expires_in: 1.week

我想这不是世界末日,除了你必须记住它被存储为一个数组。

或者,您可以使用可缓存模块稍微抽象一下该功能。那你就不必“记住”任何东西。

答案 2 :(得分:0)

这对我有用,它可以获取特定缓存键的剩余TTL(在Redis缓存存储中):

Rails.cache.redis.ttl("#{Rails.cache.options[:namespace]}:#{my_key}")