Redis穿透/血崩/惊群 如何产生?如何解决?

1:什么是redis穿透?


	个人的理解:就是用户请求透过redis去请求mysql服务器,导致mysql压力过载。但一个web服务里,
	极容易出现瓶颈的就是mysql(所以才让redis/memcache等去分担mysql 的压力),所以这种问题是万
	万要避免的

2:什么是redis血崩?


	个人的理解:就是redis服务由于负载过大而宕机,导致mysql的负载过大也宕机,最终整个系统瘫痪

3:什么是redis惊群?


	个人的理解:高并发下,由于一个key失效,而导致多个线程去mysql查同一业务数据并存到redis(并发下,
	存了多份数据),而一段时间后,多份数据同时失效。导致压力骤增
	

4:redis穿透如何产生?如何解决?

	
	产生原因:
	
		用户一直请求一个mysql中不存在的数据,由于数据不存在,所以redis一直无法命中。所有的请求就
		集中在了mysql。导致压力骤增,最终崩溃
		
	解决方法:
	
		请求一个mysql中不存在的值,往redis中存一个null,并返回空。往后的请求都走redis,不会给
		mysql施压	

5:redis血崩如何产生?如何解决?


	产生原因:
		
		1:高并发下,读写过于频繁
		2:同一时间设置的key过多
		3:同一时间过期的key过多

	解决方法:
		
		1:redis集群,将原来一个人干的工作,分发给多个人干
		2:缓存预热
			
			(关闭外网访问,先开启mysql,通过预热脚本将热点数据写入缓存中,启动缓存。开启外网服务)
			
		3:数据不要设置相同的生存时间,不然过期时,redis压力会大

6:redis惊群如何产生?如何解决?


	产生原因:
		
		高并发情况下,由与一个缓存数据的失效,导致多个进程去请求同一个数据。一段时间后,多个
		数据有在同一时间过期
		
	解决方法:
	
		1:分级缓存(缓存两份数据,第二份数据生存时间长一点作为备份,第一份数据用于被请求命中
		,如果第二份数据被命中说明第一份数据已经过期,要去mysql请求数据重新缓存两份数据)
					
		2:计划任务(假如数据生存时间为30分钟,计划任务就20分钟执行一次更新缓存数据)

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值