Redis 缓存穿透

发布于 2024-04-09 22:57:21 字数 1237 浏览 14 评论 0

问题

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

问题排查

  • Redis 中大面积出现未命中
  • 出现非正常 URL 访问

问题分析

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

解决方案(术)

  • 缓存 null
    • 对查询结果为 null 的数据进行缓存(长期使用,定期清理),设定短时限,例如 30-60 秒,最高 5 分钟
  • 白名单策略
    • 提前预热各种分类数据 id 对应的 bitmaps,id 作为 bitmaps 的 offset,相当于设置了数据白名单。当加载正常数据时,放行,加载异常数据时直接拦截(效率偏低)
    • 使用布隆过滤器(有关布隆过滤器的命中问题对当前状况可以忽略)
  • 实施监控
    • 实时监控 redis 命中率(业务正常范围时,通常会有一个波动值)与 null 数据的占比
      • 非活动时段波动:通常检测 3-5 倍,超过 5 倍纳入重点排查对象
      • 活动时段波动:通常检测 10-50 倍,超过 50 倍纳入重点排查对象
    • 根据倍数不同,启动不同的排查流程。然后使用黑名单进行防控(运营)
  • key 加密
    • 问题出现后,临时启动防灾业务 key,对 key 进行业务层传输加密服务,设定校验程序,过来的 key 校验。例如每天随机分配 60 个加密串,挑选 2 到 3 个,混淆到页面数据 id 中,发现访问 key 不满足规则,驳回数据访问

总结

  • 缓存穿透访问了不存在的数据,跳过了合法数据的 redis 数据缓存阶段,每次访问数据库,导致对数据库服务器造成压力。通常此类数据的出现量是一 个较低的值,当出现此类情况以毒攻毒,并及时报警。应对策略应该在临时预案防范方面多做文章。无论是黑名单还是白名单,都是对整体系统的压力,警报解除后 尽快移除。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

叹梦

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文