如何知道过期日期并为rails中的缓存文件创建日期?
Posted
技术标签:
【中文标题】如何知道过期日期并为rails中的缓存文件创建日期?【英文标题】:How know date when expire and create date for cache file in rails? 【发布时间】:2021-12-05 13:39:01 【问题描述】:我正在使用 Ruby3+ 和 Rails 6+ 并缓存文件:config.cache_store = :file_store, 'public/cache'
我试试:
key = 'test'
Rails.cache.write(key, 'test!!')
缓存文件工作正常:
Rails.cache.read(key)
=> "test!!"
但如果我尝试在 SO 上的其他帖子中找到的解决方案,如下所示:
Rails.cache.send(:read_entry, key, ).expires_at
我有以下错误:
/home/USER/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/cache/strategy/local_cache.rb:131:in `read_entry': wrong number of arguments (given 2, expected 1) (ArgumentError)
如果我尝试删除最后一个参数,则没有错误,但返回 nil ...
那么我怎样才能找到我的缓存的过期和创建日期?
【问题讨论】:
@razvans 我想在页面上显示缓存创建的日期(了解信息的日期);) 【参考方案1】:如果您想知道创建缓存项的时间,可以使用此解决方法。
您可以将创建日期与您的数据一起写入
key = "some key"
Rails.cache.write(key, expires_at: Time.current + 1.day, value: "test!!!" )`
然后用
检索它item = Rails.cache.read(key)
item[:value]
# => test!!!
item[:expires_at]
# => 20211023********
您可以轻松地将其转换为一些实用程序帮助方法,让您的生活更轻松。
# In some helper or utility class
def write_to_cache(key, value, expiry_time = 1.day)
Rails.cache.write(key, expires_at: Time.current + expiry_time, value: value )
end
def cache_key_value(key)
item = Rails.cache.read("key")
item[:value]
end
def cache_key_expires_at(key)
item = Rails.cache.read("key")
item[:expires_at]
end
# somewhere else
key = "test"
write_to_cache(key, "test value")
cache_key_value(key)
# => "test value"
cache_key_expires_at(key)
# => 20211023********
【讨论】:
这行得通,但它是个骗子,我想要同样不缓存日期本身,只需使用文件缓存的日期就足够了...... 这绝不是作弊,而是一种变通方法,很多时候编程就是这样。它也适用于所有缓存类型、redis、memcache...以上是关于如何知道过期日期并为rails中的缓存文件创建日期?的主要内容,如果未能解决你的问题,请参考以下文章