我有一个用户可以拥有大量已保存的搜索和许多任务。我正在使用以下
缓存它们- cache user do
- user.tasks.each do |task|
- cache task do
# do something with task
- cache user do
- user.saved_searches.each do |search|
- cache search do
# do something with search
我已经添加了通过touch
选项更新用户的选项,无论何时更新这些记录。我要澄清的问题是这种情况:
我更新了一个搜索,该搜索使该搜索的缓存失效,实际上是用户的缓存。由于用户的缓存已过期,因此将执行user.tasks
。
有没有办法防止这种情况?
我正在考虑向cache user
添加一个密钥并手动使我在使用cache_digest
gem之前一直在做的缓存失效,但我无法弄清楚如何做到这一点。
答案 0 :(得分:0)
您可以使用集合的最新updated_at,as the Rails Guide on caching演示,而不是使用用户的缓存键来使集合过期。 E.g。
- cache("user-tasks/#{user.id}-#{user.tasks.maximum(:updated_at).try(:to_i)}") do
- user.tasks.each do |task|
- cache task do
# do something with task
- cache("user-searches/#{user.id}-#{user.saved_searches.maximum(:updated_at).try(:to_i)}") do
- user.saved_searches.each do |search|
- cache search do
# do something with search