Redis实际运用中遇到的问题及解决方案

本文详述了Redis在实际应用中遇到的缓存预热、缓存雪崩、缓存击穿和缓存穿透问题,以及针对这些问题的解决方案。通过缓存预热避免宕机,缓存雪崩时采用多级缓存、限流降级等策略,缓存击穿时设置二级缓存和分布式锁,缓存穿透时使用缓存null和布隆过滤器。同时强调了性能指标监控的重要性,如Performance、Memory、Basic activity、Persistence和Error的监控。

缓存预热

就是系统启动前,提前将相关的缓存数据直接加载到缓存系统中。避免用户请求的时候,先查询数据库,然后再查数据缓存的问题。让用户直接查询事先被预热的缓存数据。

现象:宕机

不进行缓存预热可能带来宕机的问题

问题排查

  • 请求数量比较大
  • 主从之间数据吞吐量较大,数据同步操作频度较高

解决方案

  • 统计数据访问记录,统计访问频度较高的热点数据
  • 利用LRU数据删除策略,构建数据留存队列(例如使用storm和kafka)
  • 将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据
  • 利用分布式多服务器同时进行数据读取,提速数据加载过程
  • 使用脚本程序固定触发数据预热过程
  • 如果条件允许,使用CDN,效果会更好

缓存雪崩

就是瞬间过期数据量太大,导致对数据库服务器造成压力。如果能够有效避免过期时间集中,可以有效解决雪崩现象的出现,配合其他策略一起使用,并监控服务器的运行数据,根据运行记录快速调整。

现象:数据库服务器崩溃

  • 系统平稳运行过程中,忽然数据库连接量激增
  • 应用服务器无法及时处理请求
  • 大量408、500错误页面的出现
  • 客户反复刷新页面获取数据
  • 数据库崩溃
  • 应用服务器崩溃
  • 重启应用服务器无效
  • redis服务器崩溃
  • redis集群崩溃
  • 重启数据库后再次被瞬间流量放倒

问题排查

  • 在一个较短的时间内,缓存中较多的key集中过期
  • 此周期内请求访问过期的数据,redis未命中,redis向数据库获取数据
  • 数据库同时接到大量的请求无法及时处理
  • redis大量请求被积压,开始出现超时现象
  • 数据库流量激增,数据库崩溃
  • 重启后仍然面对缓存中无数据可用
  • redis服务器资源被严重占用,redis服务器崩溃
  • redis集群崩溃
  • 应用服务器无法及时得到数据响应请求,来自客户端的请求数量越来越来多,应用服务器崩溃
  • 应用服务器、redis、数据库全部重启,但效果不理想

解决方案(理论)

  • 更多的页面静态化处理
  • 构建多级缓存架构(nginx+redis+ehcache)
  • 检测mysql严重耗时的业务并进行优化
  • 灾难预警机制
    • 监控redis服务器性能指标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值