电商网站中雪崩会在什么时候发生可能会导致缓存雪崩

sponsored links
MC的缓存雪崩现象和缓存无底洞的原因以及导致的后果的总结
缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降,缓存中确实的数据去数据库查询,短时间内,造成数据库服务器的崩溃。
这时,我们需要重启数据库,但重启一段时间后,又会被压垮,但此时缓存的数据也比之前要多。
这样,反复几次重启数据库,缓存才重建完成,数据库才稳定的运行。
或者,是由于缓存周期性的失效,比如每6个小时失效一次,那么每6个小时,将有一个请求的峰值,严重者设置会令数据库崩溃。
可以看下面的这幅统计图,是数据库的访问量统计图:
可以看到,缓存每6个小时就失效一次,每过6个小时就到了一次请求的高峰时期,那这样的话,每过6个小时数据库就会崩溃一次的。
我们可以采用的解决方案是:
& 可以把缓存设置的失效的时间设置为3到9小时的生命周期,这样不同时失效,把工作分担到各个时间点上去
缓存无底洞现象:
该问题由facebook的工作人员提出的,facebook在2010年左右,memcached节点就已经达
3个.缓存数千G内容.他们发现了一个问题memcached连接频率,效率下降了,于是加memcached节点,添加了后,发现因为连接频率导致的问题,仍然存在,并没有好转,称之为&无底洞现象&.
multiget-hole的问题分析:
以用户为例:user-133-age,user-133-name,user-133-height ... N个ke,当服务器增多的时候,133号用户的信息,也被更散落在更多的节点上,所以,同样是访问个人主页,得到相同的个人信息,节点越多,要连接的节点也越多,对于memecached的连接数,并没有随着节点的增多,而降低。于是出现了无底洞现象。
multiget-hole的解决方案:
把某组key,按其共同前缀,来进行分布:
比如 user-133-age,user-133-name,user-133-height 这3个key,在使用分布式计算法求其节点时,应该以&user-133&来进行计算,而不是以 user-133-age/name/height来进行计算。
这样,3个关于个人信息的key,都落在同1个节点上,访问个人主页时,只需要连接1个节点.问题得到解决
2 NoSQL和传统的RDBMS,并不是水火不容,两者在某些设计上,是可以相互参考的.
4 对于memcached,redis这种kv存储,key的设计,可以参考MySQL中表/列的设计.
6 比如:user表下,有age列,name列,身高列,
7 对应的key,可以用user:133:age=23,user:133:name=&lisi&,user:133:height=168;
一:Memcached 缓存雪崩现象(1)造成原因:一般是由某个节点失效,导致其他的节点的缓存命中率下降,缓存中缺失的数据查询,短时间内造成的数据库服务器奔溃.重启DB,短期内又被压垮,但缓存的数据增加了一些,DB反复的多次的启动,多次缓存才能建立完毕,DB才能稳定的运行.或者是由于缓存周期性的失效,比如每6小时失效一次,那么每6小时,将有一个请求‘峰值’严 ...
一般是由于某个节点失效,导致其他节点的缓存命中率下降,缓存中的数据去数据库查询,短时间内造成数据库服务器崩溃.
重启DB,短期又被压垮,但缓存数据也多了一些. DB反复多次启动,缓存重建完毕,DB才稳定运行.
或者是由于缓存周期性的失效,比如每6小时失效一次,6小时将有一个请求峰值. 严重者甚至会令DB崩溃.
解决方案: 1.把缓存设置成随机3到 ...
缓存穿透 什么是缓存穿透? 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB).如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力.这就叫做缓存穿透.
如何避免? 1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert ...
JSP页面img图片缓存问题现象表述及问题解决 l
问题表述: 当对含有头像的客服人员信息进行修改(含对头像信息的修改)后,重新打开数据修改界面,发现文本内容修改成功,而头像内容仍然显示为原来的头像——数据库中的对应信息头像所在字段数据已经成功更新.
前提: jsp页面中进行了页面缓存清除处理: &meta http-equiv=&quot ...
缓存雪崩 缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机. 解决思路: 1,采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力.这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量. 2,分析用户行为,尽量让失效时间点均匀分布.避免缓存 ...电子商务网站比较常用的缓存策略架构_PHP教程-织梦者
当前位置:&>&&>& > 电子商务网站比较常用的缓存策略架构
电子商务网站比较常用的缓存策略架构
本文将为大家说明电子商务网站比较常用的缓存策略架构的说明,具体操作请看面的内容缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。
这次主要是分享下自己觉得比较通用的一个缓存策略的架构方案,也是比较 容易理解的.欢迎吐槽.
有更牛逼的也欢迎大家说下:
缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。
缓存的原理
(1) 将数据写入/读取速度更快的存储(设备);
(2) 将数据缓存到离应用最近的位置;
(3) 将数据缓存到离用户最近的位置。
在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用。
(1) CDN缓存;
(2) 反向代理缓存;
(3) 分布式Cache;
(4) 本地应用缓存;
常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等;
缓存的内容:文件,数据,对象;
缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)
缓存设计需要解决以下几个问题:
(1) 缓存什么?
哪些数据需要缓存:1.热点数据;2.静态资源;
(2) 缓存的位置?
CDN,反向代理,分布式缓存服务器,本机(内存,硬盘)
(3) 如何缓存的问题?
1.固定时间:比如指定缓存的时间是30分钟;
2.相对时间:比如最近10分钟内没有访问的数据;
实时写入;(推)
异步刷新;(推拉)
这些内容可能对你也有帮助
更多可查看PHP教程列表页。
猜您也会喜欢这些文章缓存雪崩和缓存穿透 - CSDN博客
缓存雪崩和缓存穿透
缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。
解决思路:
1,采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力。这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量。
2,分析用户行为,尽量让失效时间点均匀分布。避免缓存雪崩的出现。
3,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。
缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库中查询。
解决思路:
1,如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴。
2,根据缓存数据Key的规则。例如我们公司是做机顶盒的,缓存数据以Mac为Key,Mac是有规则,如果不符合规则就过滤掉,这样可以过滤一部分查询。在做缓存规划的时候,Key有一定规则的话,可以采取这种办法。这种办法只能缓解一部分的压力,过滤和系统无关的查询,但是无法根治。
3,采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的BitSet中,不存在的数据将会被拦截掉,从而避免了对底层存储系统的查询压力。关于布隆过滤器,详情查看:基于BitSet的布隆过滤器(Bloom Filter)&
本文已收录于以下专栏:
相关文章推荐
缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力。
1.对查询机构为空的情况也进...
设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不...
一、缓存穿透
我们在项目中使用缓存通常都是APP先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存...
我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题:
穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层。从而失去缓存的意义。
解决办法:①用一个bitmap和n个hash函数做布隆过滤器过滤没有在缓存的键。
   ②持久层查询不到就缓存...
作为WEB开发人员,缓存是最基本也是最常用的知识了,开发中在实现业务的时候总会通过缓存来实现功能,但是如果你用了缓存,你就得注意缓存带来的一系列隐藏的问题。比如说缓存穿透、缓存雪崩、缓存并发、缓存一致...
什么是缓存穿透?
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key...
  缓存雪崩是由于原有缓存失效(过期),新缓存未到期间。所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。
缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。
解决思路:
1,采用加锁计数,...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)504 Gateway Time-out
504 Gateway Time-out

我要回帖

更多关于 缓存雪崩解决方案 的文章

 

随机推荐