
Redis缓存穿透/击穿/雪崩
发布日期:2021-05-06 19:58:41
浏览次数:26
分类:精选文章
本文共 587 字,大约阅读时间需要 1 分钟。
Redis缓存穿透/击穿/雪崩
考虑一个简单的场景,只有MySQL数据库和Redis在存放数据,然后用户发起查询请求,然后又下面几个问题。
缓存穿透/击穿
- 缓存穿透: 用户请求的数据在redis缓存里头和MySQL都没有,当大量用户并发请求,MySQL压力过大,容易奔溃。
- 缓存击穿:redis缓存里头某个热点key失效时,大量用户并发请求直接来到MySQL数据库上,MySQL压力过大,容易奔溃。
缓存雪崩
当redis缓存中大部分key在某个时间内集体失效了(或者redis宕机了),大量用户并发请求直接来到MySQL数据库上,MySQL压力过大,容易奔溃。
解决方案
通用解决方案
- 接口增加用户鉴权,一些热点接口甚至需要考虑一下是否需要设置同个用户某段时间内的访问次数。
缓存穿透解决方案
- 缓存和数据库中都没有取到数据后,可以将key-value对写为key-null,注意控制好缓存时间,太长可能影响业务的正常进行。
- 增加布隆过滤器,通过数据预热将可能涉及到的数据以hash方式进行存储,这样可以过滤部分无效请求。
缓存击穿解决方案
- 根据其含义,可以考虑设置热点数据永远不过期。
- 加互斥锁。
缓存雪崩解决方案
- 暴力的解决方法,设置所有key不过期(注意内存使用情况)
- 随机化缓存数据的过期时间
- 如果redis进行集群部署,尽量将数据均匀分布(考虑一致性hash算法)
发表评论
最新留言
很好
[***.229.124.182]2025年04月11日 12时10分28秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
使用QT实现一个简单的登陆对话框(纯代码实现C++)
2019-03-05
QT :warning LNK4042: 对象被多次指定;已忽略多余的指定
2019-03-05
GLFW 源码 下载-编译-使用/GLAD配置
2019-03-05
Typescript 学习笔记六:接口
2019-03-05
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2019-03-05
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
go语言简单介绍,增强了解
2019-03-05
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2019-03-05
MongoDB 快速扫盲贴
2019-03-05
one + two = 3
2019-03-05
sctf_2019_easy_heap
2019-03-06
PyQt5之音乐播放器
2019-03-06
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2019-03-06
SQL注入
2019-03-06
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2019-03-06
Problem 330A - Cakeminator (思维)
2019-03-06
LeetCode75 颜色分类 (三路快排C++实现与应用)
2019-03-06
调试vs2019代码的流程
2019-03-06
bcolz的新操作
2019-03-06