A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 为热爱挥汗 于 2018-12-25 10:31 编辑

什么是memcache缓存雪崩?
传智播客上海校区  --崔长春老师

一.什么是memcache缓存雪崩?
没有使用缓存技术之前,数据获取需要查询数据库,但是从数据库获取数据本质还是从硬盘读取,他肯定没有从内存中读取速度快,程序工程师为了让用户体验更好,给数据加了缓存层,甚至是专门的缓存服务器。缓存技术各种各样,本文讨论memcache缓存,程序语言用的是php
加了memcache缓存之后,程序的逻辑通常变成这样:
[AppleScript] 纯文本查看 复制代码
$data=$memcache->get(键);
if($data){
   return $data;
}else{
    //1.读取数据库,获取对应数据$data。此处略
//2.将数据存入缓存,接着return 数据
   $memcache->set(键,$data);
   return $data;
}
有了这层缓存,第一个用户请求此数据需要查询数据库,后面的用户请求此数据就可以从缓存中查询,减轻了数据库压力,同时给用户的响应更快,体验更好了。
   理想总是如此美好,现在现实来了,如果这些数据集中过期,或者是memcache服务器挂掉,在缓存中得不到数据,会导致大量请求都来查询数据库,数据库的压力瞬间变大,数据库甚至会因此挂掉。这就是缓存雪崩。
对于多个memcache服务器情况,例如分布式memcache服务器,某一个节点失效(例如宕机),会导致其他的节点的缓存命中率下降,大量的数据需要查询数据库,短时间内造成的数据库服务器崩溃DB反复的多次的启动,多次缓存才能建立完毕,DB才能稳定的运行,这也叫缓存雪崩。
下面是缓存雪崩的形象化图示:

              
            正常情况                                                                                   缓存雪崩
     正常时大量数据取自缓存,雪崩后大量数据来自数据库。
二.如何解决memcache缓存雪崩?
从缓存雪崩的现象可以看出解决缓存雪崩的办法,主要如下:
1. 分析用户行为,尽量让失效时间点均匀分布
2. 可以选择闲时过期;
3. 主从复制,读写分离,就是用多台服务器来扛。

2 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2018-12-25 08:33:31
沙发
看一看。
回复 使用道具 举报
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马