memcached案例

一、缓存雪崩
 缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降,缓存中缺失的数据就会去数据库查询,短时间内造成数据库服务器崩溃。重启数据库短期内又被压垮,但缓存数据也多了一些,反复多次重启数据库,才使得数据库稳定运行。
 或者,是由于缓存周期性的失效,比如每6小时失效一次,那么每6小时,将有一个请求峰值,严重者甚至会令数据库崩溃。

案例:设置了每6小时刷新缓存
解决方法:
 调整缓存时间,每天夜里刷新缓存
 或者,把缓存设置为随机3到9小时的生命周期,这样不同时失效,把刷新缓存的工作分担到各个时间点上去。
二、无底洞现象
 memcached连接频率的增高,导致效率的下降。在添加memcached节点后,因为连接频率的增高导致的问题,仍然存在,并没有好转,称之为无底洞现象。
 造成无底洞现象发生的原因是缓存数据太分散,相同key的缓存分散在各个memcached节点上。
解决方法:
 设计合理的key,使相同key的缓存存放在同一个memcached节点上。
三、永久数据被踢现象
1、memcached的过期数据惰性删除
 这个过期,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除。这个称为lazy expiration,惰性失效。这样节省了时间和检测的成本。
(1)、当某个值过期后,并没有从内存中删除,因此stats统计时,curr_item有其信息。
 设置键为aaa,值为a,过期时间为10秒的缓存,此时curr_item的值为4。
在这里插入图片描述
 10秒后缓存过期后,查看curr_item的值并未变化。
在这里插入图片描述
(2)、当某个新值去占用他的位置时,当成空chunk来占用。
(3)、当get值时,判断是否过期,如果过期,返回空,并且清空,curr_item就减少了。
 获取键为aaa的缓存数据。
在这里插入图片描述
 然后,再次查看curr_item的值变成了3。
在这里插入图片描述
2、memcached采用Iru删除机制
 Iru(least recently used)最近最少使用。Iru删除机制,删除最近最少使用的。即使某个key的过期时间expire设置的是0,也一样会被踢出来,这种现象称为永久数据被踢现象。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值