Redis的企业级解决方案【缓存预热、雪崩、击穿、穿透】

缓存预热

场景:redis一经启动,很快宕机
对应问题:请求数量较高、主从之间数据的吞吐量较大,数据同步操作频度较高(相当于用户需要大量访问数据库的时候,数据库中没有数据)
解决方案:思路主要是将数据提前加入到数据库中(预热的意思),把访问量高的数据先加,编写脚本来加
在这里插入图片描述

缓存雪崩

概念:

数据库服务器崩溃(不是redis数据库崩溃)

崩溃过程:

1.系统平稳运行过程中,忽然数据库连接量激增
2.应用服务器无法及时处理请求
3.大量404,500错误页面出现
4.客户反复刷新页面获取数据
5.数据库崩溃
6.应用服务器崩溃
7.重启应用服务器无效
8.Redis服务器崩溃
9.Redis集群崩溃10.重启数据库后再次被瞬间流量放倒

问题排查:

1.在一个较短的时间内,缓存中较多的key集中过期(redis中没有数据了
2.此周期内请求访问过期的数据,redis末命中,redis向数据库获取数据
3.数据库同时接收到大量的请求无法及时处理
4.Redis大量请求被积压,开始出现超时现象
5.数据库流量激增,数据库崩溃
6.重启后仍然面对缓存中无数据可用
7.Redis服务器资源被严重占用,Redis服务器崩溃
8.Redis集群呈现崩塌,集群瓦解
9.应用服务器无法及时得到数据响应请求,来自客户端的请求数量越来越多,应用服务器崩溃
10.应用服务器,redis,数据库全部重启,效果不理想

问题分析:

出现雪崩的问题主要是两点
1、短时间范围内
2、大量的key集中过期

解决方案:错峰

1.更多的页面静态化处理(让用户少拿数据)
2.构建多级缓存架构:Nginx缓存+redis缓存+ehcache缓存
3.检测Mysql严重耗时业务进行优化。对数据库的瓶颈排查:例如超时查询、耗时较高事务等
4.灾难预警机制——监控redis服务器性能指标

  • ·CPU占用、CPU使用率
  • ·内存容量
  • ·查询平均响应时间
  • .线程数

5.限流、降级——短时间范围内牺牲一些客户体验,限制一部分请求访问,降低应用服务器压力,待业务低速运转后再逐步放开访问

策略调整

1.LRU与LFU切换
2.数据有效期策略调整

  • 根据业务数据有效期进行分类错峰,A类90分钟,B类80分钟,C类70分钟
  • 过期时间使用固定时间+随机值的形式,稀释集中到期的key的数量

3.超热数据使用永久key
4.定期维护(自动+人工)对即将过期数据做访问量分析,确认是否延时,配合访问量统计,做热点数据的延时
5.加锁(慎用!)会让所有人访问数据的时候排队,会极大牺牲系统性能

缓存击穿

概念

和缓存雪崩一样,也是数据库服务器崩溃。但是击穿的重点在于单点key访问量瞬间过大,导致的击穿。

崩溃过程

1.系统平稳运行过程中
2.数据库连接量瞬间激增
3.Redis服务器无大量key过期(和缓存雪崩最大的区别
4.Redis内存平稳,无波动5.Redis服务器CPU正常
6.数据库崩溃

问题排查

1.Redis中某个key过期,该key访问量巨大
2.多个数据请求从服务器直接压到Redis后,均末命中
3.Redis在短时间内发起了大量对据库中同一教据的访问(热点爆炸信息)

问题分析

两个关键点:
1、单个key成为了高热数据
2、key过期

解决方案:预防与监控

1.预先设定
以电商为例,每个商家根据店铺等级,指定若干款主打商品,在购物节期间,加大此类信息key的过期时长
注意:购物节不仅仅指当天,以及后续若干天,访问峰值呈现逐渐除低的趋势
2.现场调整
监控访问量,对自然流量激增的数据延长过期时间或设置为永久性key
3.后台刷新数据
启动定时任务,高峰期来临之前,刷新数据有效期,确保不丢失
4.二级缓存
设置不同的失效时间,保障不会被同时淘汰就行
5.加锁
分布式锁,防止被击穿,但是要注意也是性能瓶颈,慎重!

缓存穿透(注意和击穿区分开)

概念

也是数据库服务器崩溃了,但是引起该问题的原因是,redis中目标数据不存在

崩溃过程

1.系统平稳运行过程中
2.应用服务器流量随时间增量较大
3.Redis服务器命中率随时间逐步降低
4.Redis内存平稳,内存无压力
5.Redis服务器CPU占用激增
6.数据库服务器压力激增
7.数据库崩溃

问题排查

1、Redis中大面积的未命中
2、出现了大量的非正常URL访问(通过URL将要访问的key在redis中不存在)

问题分析

  • 获取的数据在数据库中也不存在,数据库查询未得到对应数据
  • Redis获取到null数据未进行持久化,直接返回
  • 下次此类数据到达重复上述过程
  • 大概率是黑客攻击服务器

解决方案

1、缓存查询结果为null的数据,并定时清除
2、白名单策略
3、实时监控redis的命中率
4、key加密,对key进行业务层面的传输加密服务,设定校验程序,当访问的key不满足加密规则的时候,驳回数据访问

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值