如何使用Russian Doll缓存保持缓存温度?

时间:2013-04-30 13:31:01

标签: ruby-on-rails fragment-caching russian-doll-caching

我一直在试用Rails应用程序上的俄罗斯玩偶片段缓存,更具体地说是在其主要的仪表板页面上。这是用户登录后看到的第一页,是俄罗斯娃娃的好选择,因为它包含许多嵌套元素。

当用户自己进行需要应用重新渲染仪表板的更改时,缓存效果很好。缓存加载时间比渲染整页快4倍。

但是,系统会更改数据。例如,每天晚上,我们会按前一天的新汇率更新所有值。这将自动使Dashboard中的大多数片段失效,第二天早上用户登录时会遇到冷缓存。

可以在系统更新后重新生成这些片段缓存,以使它们保持温暖?我想我可以在任何系统更新后手动write片段,但我也必须手动管理密钥和依赖项。 (我目前正在使用cache_digest gem,非常方便。)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果它是您的选项,那么您可以在数据属性中包含计算所需的所有数据,然后使用Javascript将其转换为文本。

所以你的原始输出可能是:

<li data-gbp-amount="2.50"></li>

然后你跟JS一起做了类似的事情:

$(document).find("[data-gbp-amount]").each(index, el) ->
  $(el).text($(el).data("gbp-amount") * todaysExchangeRate)

这样,Rails输出的所有内容都将被缓存,并且不会随汇率变化。

答案 1 :(得分:0)

一切都取决于cache_key。 cache_key基于model id,updated_at属性和html模板中的md5。因此,如果您更改这3个密钥中的一个,那么您将缓存过期。

我不知道您的数据有多复杂,但您可以在主AR :: model中使用touch方法来更改缓存键。也许你有一个主要的AR ::模型,其他记录是家属。