redis常见问题和解决方案
预热问题
- 在启动redis的时候,因为热点数据未加载,导致服务器压力大,cpu增高,甚至崩溃
问题解析
- 缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统,毕淼在用户请求的时候,先查询数据库,再将数据缓存的问题,用户直接查询事先被预热的缓存数据
解决方案
- 前置准备工作
- 日常例行统计数据访问记录,统计访问频度较高的热点数据
- 利用LRU数据删除策略,构件数据留存队列
- 准备工作
- 将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据
- 利用分布式多服务器同时进行数据读取,提速数据加载过程
- 实施
- 使用脚本程序固定触发数据预热过程
- 如果条件允许,使用CDN,效果会更好
雪崩
问题排查
- 在一个较短的时间内,缓存中较多的key集中过期
- 这周期内,请求访问过期的数据,redis未命中,redis向数据库获取数据
- 数据库同时接受到大量的请求,无法及时处理
- redis大量请求被积压.开始出现超时现象
- 数据库流程激增,数据库崩溃
- 重启后仍然面对缓存中无数据可用
- reids服务器资源被严重占用,redis服务器崩溃
- 应用服务器无法及时得到数据响应请求,来自客户端的请求数量越来越多,应用服务器崩溃
- 应用服务器,redis,数据库全部重启,效果不理想
问题分析
- 短时间范围内
- 大量key集中过期
解决方案(外部优化)
- 更多页面静态化处理
- 构件多级缓存结构,nginx+redis+ehcache
- 检测mysql严重耗时业务进行优化
- 灾难预警机制
- 监控redis服务器性能指标(cpu,内存容量,查询平均响应时间,线程数)
- 限流,降级:短时间内牺牲一些客户体验,闲置一部分请求访问,降低应用服务器压力,待业务低速运转后逐步放开访问
解决方案(内部优化)
- LRU和LFU切换
- 数据有效期策略调整
- 根据业务数据有效期进行分类错峰
- 过期时间使用固定时间+随机数的形式,稀释集中到期的key的数量
- 超热数据永久使用key
- 定期维护:对即将过期数据做访问量分析,确认是否延时,配合访问量统计,做热点数据的延时
- 加锁
总结
- 缓存雪崩就是瞬间过期数据量过大,导致对数据服务器造成压力,如能有效避免过期时间集中,可以有效解决雪崩问题的出现,
加上其他策略一起使用,监控服务器的运行数据,根据运行记录做调整
击穿
问题排查
- 系统平稳运行过程中
- 数据库连接梁瞬间激增
- redis服务器无大量key过期
- redis内存平稳,无波动
- redis服务器cpu正常
- 数据库崩溃
问题分析
- 单个key高热数据
- key过期
解决方案
- 预先设定:在一些应用场景下,延长key的过期时间,购物节之类的
- 现场调整:监控访问量,对自然流量递增的延长时间或设置成永久性key
- 后台刷新数据:启动定时任务,高峰期来临之前,刷新有效数据,确保不丢失
- 二级缓存:设置不同的失效时间,保障不会被同时淘汰
- 加锁:分布式锁,防止被击穿
总结
- 缓存击穿就是单个高热数据过期瞬间,数据访问量大,未命中redis后,发起的大量对同一数据的数据库访问,导致
对数据库服务器造成压力,应对策略应该在业务数据分析与预防方面进行,配合运行监控测试和即时调整策略,
毕竟单个key的过期监控难度较高,配合雪崩处理策略即可.
问题排查
- redis大面积出现未命中
- 出现非正常url访问
问题分析
- 获取的数据在数据库中也不存在,数据查询尾的大对应数据
- redis获取到null数据未进行持久化,直接返回
- 下次此类数据到达重复上述过程
- 出现黑客攻击服务器
解决方案
- 缓存null:对查询结果为null的数据进行缓存,设定短时限,例如30-60s,最高5分钟
- 白名单策略
- 提前预热各种分类数据id对应的bitmaps,id作为bitmaps的offset,相当于设置数据白名单,加载正常数据,就放行
,异常数据就拦截 - 使用布隆过滤器
- 提前预热各种分类数据id对应的bitmaps,id作为bitmaps的offset,相当于设置数据白名单,加载正常数据,就放行
- 实施监控
- key加密:问题出现后,临时启动防灾业务key,对key进行业务层传输加密服务,设定校验程序,过来的key校验.
总结
- 缓存击穿访问了不存在的数据,跳过了合法数据的rendis数据缓存阶段,每次都访问数据库,导致对数据服务器造成压力,
数据的出现量是一个较低的值,当出现此类情况以毒攻毒,及时报警, - 白名单和黑名单,对整体系统的压力都有,警报解除后尽快移除
来源:CSDN
作者:假装自己不胖
链接:https://blog.csdn.net/weixin_42672777/article/details/103465941