博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memcache缓存雪崩、缓存无底洞、缓存穿透、永久数据被踢现象
阅读量:6689 次
发布时间:2019-06-25

本文共 1058 字,大约阅读时间需要 3 分钟。

一.缓存雪崩现象

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

    重启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维护一个计数器,通过计数器来判断最近最少被使用的是谁就把谁踢出,即使是永久有效的数据,如果一直没有被使用,而库又满了的情况下,就会把这个永久数据踢出

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

转载于:https://www.cnblogs.com/52lnamp/p/9640702.html

你可能感兴趣的文章
有效的java程序片段
查看>>
Java类排序_浅析
查看>>
图文详解如何修改git已提交记录的邮箱?
查看>>
配置SSH
查看>>
storm翻译(2):Concepts
查看>>
Exchange 2013文档之三:Exchange Server 2013在Windows 2012平台下部署
查看>>
Shell获取局域网指定IP地址的MAC和主机名,并插入数据库
查看>>
mysql安装记录文档
查看>>
Vmware /CentOS访问Windows中的文件
查看>>
pg9.5升级 到 pg11 的步骤
查看>>
09可靠消息最终一致性方案2--独立消息服务
查看>>
Linux系统下生成一个指定大小的文件和空间预留
查看>>
LNMP搭建9:Nginx日志切割
查看>>
智慧城市,城市建设规划的风向标!
查看>>
我的友情链接
查看>>
破解XP的登录密码简招
查看>>
(24)Poweshell中的if条件判断
查看>>
IE8 新建会话
查看>>
利用blink CEP实现流计算中的超时统计问题
查看>>
我的友情链接
查看>>