如何知道过期日期并为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中的缓存文件创建日期?的主要内容,如果未能解决你的问题,请参考以下文章

真机设备中App读取自身创建和过期日期的实现

如何使控制台中的视图缓存片段过期?

rails-如何根据时间/日期更新属性

设置 Rails cookie 的开始日期和到期日期

从 jsonwebtoken 中提取过期日期时间

如何在 C# 中生成时间和日期并为 mysql 格式化?