0

使用片段缓存摘要来缓存数据。我面临的问题是,当数据库记录更改时,应该重新生成缓存键,但它不会刷新并显示旧数据。

我以 json 格式获取数据。

cache "home_index_makes_listing_12_grid",:expires_in => 24.hours do
    yield
end

而当我更改或添加任何新的 html 元素时,请消化关键更改并刷新缓存。但后端的变化不会改变任何东西。

如何解决这个问题?

4

1 回答 1

1

当数据库中的记录更新时,缓存键不会自动更改。缓存无法以某种方式知道 DB 中的值已更改。

让我们考虑下面的示例来了解缓存键是如何更新的:

cache "home_index_makes_listing_#{user.id}_#{user.updated_at}_grid", expires_in: 24.hours do
  ...
end

user每当对象更新时,密钥就会更新。这个怎么运作:

  1. 请注意,我们的键中的动态部分是user.iduser.updated_atupdated_at因此,仅当更改此特定用户时,密钥才会更新(并且缓存会被破坏) 。

  2. 当用户请求该页面时(通过浏览器或其他任何方式),Rails 会尝试呈现此代码片段。

  3. 每次遇到这个片段时,Rails 都会评估缓存键的值。例如:“home_index_makes_listing_23_Sat,2019 年 6 月 15 日 19:50:39 IST +05:30_grid”或“home_index_makes_listing_23_Sat,2019 年 6 月 15 日 19:50:59 IST +05:30_grid”。检查两个键上的时间分量。这就是缓存键真正过期的方式。
  4. Rails 然后在config.cache_store. 对于开发环境,它通常设置为file(保存在 /tmp 中)。对于生产,您应该使用一些缓存服务器,例如 Redis 或 Memcached。

希望这可以帮助。

于 2019-07-18T18:11:48.287 回答