程序员程序员首页投稿(暂停使用,暂停投稿)

35 redis 缓存冷启动分析及解决思路

2017-09-24  本文已影响146人  逐暗者

上一篇 如何将代码打包部署到storm 集群运行, 主要讲解了如何将代码打包部署到storm 集群运行,本篇主要讲解缓存冷启动带来的问题及解决方案思路。

缓存冷启动

应用部署分析

根据上图,我们能知道些什么呢,能看出什么呢???

从上面两点看,不管如何,只要redis cluster 集群内存中没有数据,那么大量请求进来,都有可能导致mysql崩溃,从而系统不可以用。

redis cluster 集群启动,没有任何的缓存数据,可以称之为redis缓存冷启动。

缓存冷启动,redis cluster启动后,没有任何数据,就直接对外提供服务了,这是mysql 就相当于裸奔状态。

前几篇笔者提到过,解决冷启动的方案是数据预热

缓存预热

解决方案思路
技术处理思路(结合笔者前面的内容)

统计当前最新的实时的热数据是哪些,我们只需要将商品详情页访问的请求流量日志,实时上报到kafka即可

访问次数通过 商品id ,次数 方式存储,可以使用LRUMap的内存数据结构的存储方案,LRUMap 性能高,并且没有外部依赖问题

优先用内存中的一个LRUMap去存放,性能高,而且没有外部依赖(指的是第三方存储,比如redis、hbase、mysql等等)

科普: LRUMap的初始化时需要指定最大集合元素个数,新增的元素个数大于允许的最大集合个数时,则会执行 LRU淘汰算法。所有的元素在LRUMap中会根据最近使用情况进行排序。最近使用的会放在元素的最前面(LRUMap是通过链表来存储元素内容). 所以LRUMap进行淘汰时只需要删除链表最后一个即可(即header.after所指的元素对象)

LRUMap 可以考虑维护一个最多前N个商品的限制,不需要全部的数据(本身LRUMap 就是基于 LRU(least recently used) 算法实现,apache commons collections有开源的实现)

去根据storm task列表,拿到taskid,然后拿到zk 中对应的热数据list,最后从mysql 中查询出来,写到缓存中,进行预热

以上就是本章内容,如有不对的地方,请多多指教,谢谢!

为了方便有需要的人,本系列全部软件都在 https://pan.baidu.com/s/1qYsJZfY

下章预告:主要 讲解 nginx+lua 实现请求流量上报kafka

作者:逐暗者 (转载请注明出处)

上一篇下一篇

猜你喜欢

热点阅读