在 Rails 6 中更新基础模型时如何使 Action Cache 过期?
How to expire Action Cache when underlying model is updated in Rails 6?
我正在使用 Action Caching,它似乎适用于 Rails 6.
问题是当底层模型更新时如何使缓存过期?
See the actionpack-action_caching gem. See DHH's key-based cache expiration overview for the newly-preferred method.
根据 Action Caching gem issue,使用 Rails 观察者清扫缓存是可行的。
https://github.com/rails/rails-observers#action-controller-sweeper
但是 Rails Observer 似乎不适用于 Rails 6.
那么,如何使用 after_save
回调使缓存过期?
您可以传入自己的 cache_path 使密钥过期。你仍然需要获取一些记录来计算它。
class MyController < ApplicationController
before_action :set_record
caches_action :show, expires_in: 1.hour, cache_path: ->(_) { show_cache_key }
def show; end
private
def set_record
@record = Record.find(params[:id])
end
def show_cache_key
@record.cache_key
end
end
Doing cache invalidation by hand is an incredibly frustrating and error-prone process 所以我会避免使 after_step
中的密钥失效,而是使用基于密钥的过期时间。
我正在使用 Action Caching,它似乎适用于 Rails 6.
问题是当底层模型更新时如何使缓存过期?
See the actionpack-action_caching gem. See DHH's key-based cache expiration overview for the newly-preferred method.
根据 Action Caching gem issue,使用 Rails 观察者清扫缓存是可行的。
https://github.com/rails/rails-observers#action-controller-sweeper
但是 Rails Observer 似乎不适用于 Rails 6.
那么,如何使用 after_save
回调使缓存过期?
您可以传入自己的 cache_path 使密钥过期。你仍然需要获取一些记录来计算它。
class MyController < ApplicationController
before_action :set_record
caches_action :show, expires_in: 1.hour, cache_path: ->(_) { show_cache_key }
def show; end
private
def set_record
@record = Record.find(params[:id])
end
def show_cache_key
@record.cache_key
end
end
Doing cache invalidation by hand is an incredibly frustrating and error-prone process 所以我会避免使 after_step
中的密钥失效,而是使用基于密钥的过期时间。