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

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

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

自己的作业自己做咯

方法一:可以根据数据库记录的变化来生成 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 的缓存

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