缓存版本控制应用

2017/11/30 后端 天生的黑_燕睿涛

引言

有个分页展示的热点数据,怎么家缓存才是最合理的呢。如果像类似百度那样的搜索网站,搜索结果首页数据可能算真正的热点数据,第2,3… 页的数据可能很少有人去翻,只要缓存首页结果即可。对于所有页面权值相等的列表,我们缓存的时候要怎么做呢?将所有页面缓存,有插入的时候 ,将所有页面的缓存循环删除?

最早的时候我就是这种做法,分页不是很多,不超过5页,当有记录插入列表中的时候,我会循环将已经缓存的页面一个个删除. 一个个删除

后边发现页面比较多了,我在调用之前将要删除的key拼起来,一次调用删除多个。 批量删除

但当页面再多的时候,这种方式似乎就不行了,比如成百上千上万个的时候,删除起来成本比较大。这个问题我以前一直是按照上面那样处理的,缺点 显而易见,分页越少支持的越好,脏数据(未删除完成时候用户获取到的未删除页面的数据)存在的时间越短,当分页量增加的时候,上面方法的效率 会下降,脏数据存在时间也会变长。这次就在我考虑这个问题的解决方法是,我的领导给我提了个方法,甚是妙哉。

主要思想就是,加上缓存版本号的概念,当有数据插入列表的时候更新版本号,获取缓存的时候先拿到版本号,然后去跟缓存数据的版本号比较,如果 相等取出,如果不相等,从落地数据中重新同步到缓存,并更新缓存的版本号。这样,列表有变动的时候就不用一个个、或者批量去删除了,只需要更 新版本号就可以达到效果,这个方法效率很高,基本可以忽略脏数据的存在时间。

加入缓存版本号 上面的做法是直接将缓存版本号信息加在缓存键名里面了,效率更高,不用去获取到缓存的信息之后在查看。