一.缓存雪崩现象

  缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降, 缓存中缺失的数据去数据库查询,短时间内造成数据库服务器崩溃,

重启DB短期又被压跨,但新数据的缓存也更新一些,DB反复多次启动多次,缓存重建完毕,DB才稳定运行,或者是由于缓存周期性的失效,比如缓存失效周期相同,在一个时间点缓存同时失效,将有一个请求”峰值”, 严重者甚至会令DB崩溃

  解决方案:把缓存设置为不同的生命周期,这样不同时失效,把工作分担到各个时间点上去,也可以自己写脚本,放到业务比较空闲的时候自己刷新建立缓存,比如放到凌晨时分

二.缓存的无底洞现象 multiget-hole

  memcached的节点非常多,memcached 连接频率、效率下降,于是增加 memcached 节点, 发现因为连接频率导致的问题仍然存在称之为”无底洞现象”

  以用户信息为例: 一个用户有很多的信息,user1-age, user1-name,user1-height ,当服务器增多,用户的信息也被散落在更多的节点,user1-age在一个节点,user1-name在第二个节点上,user1-height在第三个节点上,

这时候同样是获取这个人的用户信息就要连接多个节点,节点越多要连接的节点也越多. 对于memcached的连接数,并没有随着节点的增多,而降低于是问题出现

解决方案:在保存用户信息的时候key键使用共同的前缀进行保存,如使用user1作为键,而不是user1-age为一个键,user1-name为一个键...

三.缓存穿透现象

  在按照key去缓存查询一个一定不存在的数据,由于缓存未命中需要从数据库查询,数据库未查到数据也不做缓存,并且对该key并发请求量很大,就会对系统造成很大的压力,这就是缓存穿透

  解决方案:当查询返回的数据为空时,我们仍然把这个空结果进行缓存并设置一个相对较短的生命周期

四.永久数据被踢现象

  缓存数据时已经设为永久有效,却莫名其妙的丢失了,这种现象是因为memcache的惰性删除机制,即LRU最近最少使用删除机制,

  当某个单元被请求时,memcache维护一个计数器,通过计数器来判断最近最少被使用的是谁就把谁踢出,即使是永久有效的数据,如果一直没有被使用,而库又满了的情况下,就会把这个永久数据踢出

  解决方案:永久数据和非永久数据分开存放

memcache缓存雪崩、缓存无底洞、缓存穿透、永久数据被踢现象的更多相关文章

  1. 13 Memcached 永久数据被踢现象

    一:Memcached 永久数据被踢现象(1)网上有人反映"memcached"数据丢失,明明设为永久不失效,却莫名其妙的丢失了. 其实这要从2个方面来找原因. 即使前面介绍的惰性 ...

  2. Memcache线上常见问题(缓存雪崩、缓存无底洞、永久数据被踢)

    缓存雪崩现象 一般是由于某个节点失效,导致其它节点的缓存命中率下降,缓存中缺失的数据直接去数据库查询,短时间内造成数据库服务器崩溃. 或者是由于缓存周期性失效,比如设置每隔6个小时失效一次,那么每6个 ...

  3. 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透

    前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...

  4. 第三节:Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案

    一. 缓存雪崩 1. 含义 同一时刻,大量的缓存同时过期失效. 2. 产生原因和后果 (1). 原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间. (2). 产生后果:恰逢秒杀高峰, ...

  5. Redis缓存雪崩、击穿、穿透

    参考大佬 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允 ...

  6. Redis系列三 - 缓存雪崩、击穿、穿透

    前言 从学校出来,做开发工作也有一定时间了,最近有想系统地进一步深入学习,但发现基础知识不够扎实,故此来回顾基础知识,进一步巩固.加深印象. 最初开始接触编程时,总是自己跌跌撞撞.不断摸索地去学习,再 ...

  7. memcache 永久数据被踢

    1.memcache的slab chunk 就像公交车的坐位一样,有大小之分,还有活跃的状态. 2.代码 index.php -->插入数据,注意$value的大小和重复次数,跟chunk和其数 ...

  8. redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案

    一.前言 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是 ...

  9. Redis总结(五)缓存雪崩和缓存穿透等问题

    前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhong/category/771056.html .今 ...

随机推荐

  1. Python函数属性和PyCodeObject

    函数属性 python中的函数是一种对象,它有属于对象的属性.除此之外,函数还可以自定义自己的属性.注意,属性是和对象相关的,和作用域无关. 自定义属性 自定义函数自己的属性方式很简单.假设函数名称为 ...

  2. 翻译:insert on duplicate key update(已提交到MariaDB官方手册)

    本文为mariadb官方手册:INSERT ON DUPLICATE KEY UPDATE的译文. 原文:https://mariadb.com/kb/en/insert-on-duplicate-k ...

  3. Git+Gitlab+Ansible剧本实现一键部署动态网站(二)--技术流ken

    项目前言 之前已经写了一篇关于git和ansible的博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>.关于git,gitliab,ansible在我 ...

  4. [JavaScript] 前端模块编程实现

    前端模块化 前端早期写代码都是全局变量满天飞,这种情况会造成全局命名空间污染,变量冲突等问题 var a = 1; var b = 2; function c(){} function d(){} 后 ...

  5. 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题

    问题 A: 割点与桥 时间限制: 1 Sec  内存限制: 5 MB提交: 475  解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如果点 ...

  6. HttpClient之可恨的Expect(C# http 请求卡住的解决办法)

    今天用HTTP.HttpClient这个对象开发的时候遇到一个奇怪的问题 当POST一个页面的时候始终卡住提交不成功 最初以为协议有错误就抓包测试在抓包在测试 最后想到是不是HttpClient的BU ...

  7. IdentityServer4客户端JWT解密实现(基于.net4.0)

    情景:公司项目基于.net4.0,web客户端实现单点登录需要自己解密id_token,对于jwt解密,.net提供了IdentityModel类库,但是4.0中该类库不可用,所以自己实现了解密方法. ...

  8. mysql全文索引之模糊查询

    旧版的MySQL的全文索引只能用在MyISAM表格的char.varchar和text的字段上. 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息大家可以随时关注官网, ...

  9. struts2_HelloWorld

    第一个Struts2程序-Hello 1.创建web工程struts2-01-Hello 2.导入jar包到bin目录,jar地址: https://files.cnblogs.com/files/a ...

  10. JS基础(三)构造函数

    JS中的构造函数 <script language="JavaScript"> window.onload = function(){ function Bottle( ...