手动过期缓存使用俄罗斯娃娃



我有一个用户,可以有很多保存的搜索和很多任务。我使用下面的

缓存它们
- 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

最新更新