我正在从服务器调用API方法:
def get_data
#.........
get_some_data_from_server
end
显然,我想缓存此调用的结果。所以我在表格中创建了一个字段,并将get_data
更改为:
def fetch_data
key = get_cache_key
Rails.cache.fetch key, expires_in: 500.minutes do
get_some_data_from_server
end
end
get_some_data_from_server
的结果不会经常变化,它几乎都是一样的。但随着时间的推移,它可能会发生变化,即使是早期,过了500分钟。因此,用户可能会从缓存中接收过时的数据。
这种策略是否明智?关于get_some_data_from_server
随时间变化我该怎么办?
答案 0 :(得分:1)
如果已更改,则密钥应更改。理想情况下,您希望您的密钥在某些方面反映其所代表的数据的独特之处。
例如,在请求的情况下。如果您提出的请求包含两个日期,则接收两点之间的数据。我的密钥将包括这两个日期,因此每次我从不同的日期范围请求数据时,它都不会使用相同的缓存密钥。
在请求总是相同的情况下,应该有一种方法来确定api是否已经改变,可能是通过较便宜的api调用。如果此调用表明新数据可用,则应清除该键的缓存并请求新数据。
在发出请求之前检查数据是否已更改的一种方法是使用ETag和条件获取。详情请参见http://fideloper.com/api-etag-conditional-get
答案 1 :(得分:-1)
如果get_some_data_from_server
的结果改变而不是通话
Rails.cache.delete(get_cache_key)