使用片段缓存摘要来缓存数据。我面临的问题是,当数据库记录更改时,应该重新生成缓存键,但它不会刷新并显示旧数据。
我以 json 格式获取数据。
cache "home_index_makes_listing_12_grid",:expires_in => 24.hours do
yield
end
而当我更改或添加任何新的 html 元素时,请消化关键更改并刷新缓存。但后端的变化不会改变任何东西。
如何解决这个问题?
使用片段缓存摘要来缓存数据。我面临的问题是,当数据库记录更改时,应该重新生成缓存键,但它不会刷新并显示旧数据。
我以 json 格式获取数据。
cache "home_index_makes_listing_12_grid",:expires_in => 24.hours do
yield
end
而当我更改或添加任何新的 html 元素时,请消化关键更改并刷新缓存。但后端的变化不会改变任何东西。
如何解决这个问题?
当数据库中的记录更新时,缓存键不会自动更改。缓存无法以某种方式知道 DB 中的值已更改。
让我们考虑下面的示例来了解缓存键是如何更新的:
cache "home_index_makes_listing_#{user.id}_#{user.updated_at}_grid", expires_in: 24.hours do
...
end
user
每当对象更新时,密钥就会更新。这个怎么运作:
请注意,我们的键中的动态部分是user.id
和user.updated_at
。updated_at
因此,仅当更改此特定用户时,密钥才会更新(并且缓存会被破坏) 。
当用户请求该页面时(通过浏览器或其他任何方式),Rails 会尝试呈现此代码片段。
config.cache_store
. 对于开发环境,它通常设置为file
(保存在 /tmp 中)。对于生产,您应该使用一些缓存服务器,例如 Redis 或 Memcached。希望这可以帮助。