观察员和清扫器从Rails的4酷删除。 但是,什么是缓存的方式,清除缓存呢?
我读到关于俄罗斯套娃缓存。 它很好的和所有,但它仅涉及该视图渲染缓存。 它不会防止数据库被击中。
例如:
<% cache @product do %>
Some HTML code here
<% end %>
你仍然需要得到@product
从数据库获取其cache_key
。 因此,网页或动作缓存仍然可以防止不必要的负载非常有用。
我可以使用一些超时清除缓存,但有时什么,如果记录没有改变?
至少在清扫你有这方面的控制。 什么是/将是做高速缓存,并清除它的正确方法?
谢谢 ! :)
欢迎来到计算机科学两个硬盘的问题,缓存失效的:)
你将不得不该手动处理由于用于当一个高速缓存对象,不像缓存视图可从它显示的对象来简单地获得,应该被无效是应用和状况相关的逻辑。
你为这个转到方法是Rails.cache.fetch
方法。 Rails.cache.fetch
接受3个参数; 缓存键,选项散列和块。 它首先尝试读取基于密钥的有效的缓存记录; 如果该项存在且尚未过期就会从缓存中返回值。 如果不能找到有效的记录它,而不是需要从块并将其存储在返回值在缓存与你指定的键。
例如:
@models = Rails.cache.fetch my_cache_key do
Model.where(condition: true).all
end
这将缓存块和重用结果等到的东西(TM)无效的关键,迫使该块被重新评估。 还要注意.all
在方法链的末端。 通常情况下的Rails会返回将被缓存的一个ActiveRecord关系对象,当你试图用这个将被评估@models
首次,整齐地回避缓存。 的.all
通话力量轨渴望负荷记录,并确保它是我们缓存的结果,而不是问题。
所以,现在你让所有的缓存上,从来没有聊到数据库再次,我们必须确保我们覆盖的另一端,缓存失效。 这是用做Rails.cache.delete
方法,仅仅需要一个缓存键并将其删除,导致错过你尝试获取它的下一次。 您也可以使用force: true
有取迫使块的重新评估选项。 无论适合你。
这一切的科学就是调用Rails.cache.delete
,在天真的情况下,这将是对更新和删除单个实例,更新,删除了收集的任何成员上创建。 总会有蜜蜂角落的情况下,他们总是专用,所以我不能帮你多有。
我认为在这个答案,你会设置一些理智的缓存存储,像memcached的或Redis的。
还记得它添加到配置/环境/ development.rb:
config.cache_store = :null_store
或者你的开发环境将缓存,你会从挫折最终无毛。
更多参考阅读: 每个人都应该使用Rails中低级别的缓存和轨道API文档
还值得一提的是,功能性不从轨道4去除,仅仅提取到的宝石。 如果您需要或希望扫墓的全部功能,只需用其重新添加到您的应用程序gem 'rails-observers'
在你的Gemfile线。 创业板既包含该从何处轨道4核心取出扫墓和观察员。
我希望你开始说helpt。