我有一个用户,可以有很多保存的搜索和很多任务。我使用下面的
缓存它们- 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的缓存已经过期,user.tasks
将被执行。
有办法防止这种情况吗?
我正在考虑添加一个键到cache user
和手动过期缓存,我一直在做之前,我使用cache_digest
宝石,但我不知道如何做到这一点。
您可以使用集合的最新updated_at,而不是使用用户的缓存键来过期集合,正如Rails指南中关于缓存的演示。例如
- 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