Redis Redis 做缓存,fragment cache 如何缓存过期

alanlong · 2015年05月28日 · 最后由 alanlong 回复于 2015年05月28日 · 2876 次阅读

如图所示,对红色框框的区域做缓存,但是里面的数字是发生变化的。 是直接使用rails的fragment页面片段缓存还是使用数据库缓存?如果是fragment缓存,如何设置缓存过期比较好? 求大神解释,最好能给出个小的demo,谢谢!!! PS: 用的redis缓存服务器,新手,第一次搭建,还在摸索阶段,对缓存这块真心不太熟。

共收到 5 条回复

自己的作业自己做咯

方法一:可以根据数据库记录的变化来生成cache_key,比如:

<% cache @issues. maximum(:updated_at) do %>
  问题跟踪:(<%= @issues.count %>)
<% end %>

这种方法无法避免执行数据库查询,主要是减少render耗时,实现起来比较省事。

方法二:使用sweeper,在插入更新删除记录时强制 cache 过期。请参考 http://apidock.com/rails/ActionController/Caching/Sweeping

数字做fragment cache没太大必要,直接把要显示的数量缓存就好。更新方法,要看对一致性的要求有多高。如果需要强一致,那就是数量变化的时候更新cache,如果弱一致,那就是用超时。

#2楼 @beiersi 我采用了您说的第一种方案,因为查看加载时间,主要耗在render,SQL查询大概才占时3%。

#3楼 @nickcen 这个是个强一致的,而且我试着将数字的取值设为常量,加载时间还是不快,所有我才想做fragment的缓存

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册