当前位置:网站首页>mysql的缓存方案问题解决
mysql的缓存方案问题解决
2022-07-17 05:08:00 【HjasnJH】
前面讲到mysql的缓存方案,把读压力放到了redis
正常情况下,两者配合工作完全没有问题
缓存穿透
假设某个数据redis不存在, mysql也不存在,⽽且⼀直尝试读怎么办?缓存穿透,数据最终压⼒
依然堆积在mysql,可能造成mysql不堪重负⽽崩溃;
解决
1. 发现mysql不存在,将redis设置为 <key, nil> 设置过期时间 下次访问key的时候 不再访问
mysql 容易造成redis缓存很多⽆效数据;
2. 布隆过滤器,将mysql当中已经存在的key,写⼊布隆过滤器,不存在的直接pass掉;
缓存击穿
缓存击穿 某些数据redis没有,但是mysql有;此时当⼤量这类数据的并发请求,同样造成mysql
过⼤;
解决
1. 加锁
请求数据的时候获取锁,如果获取成功,则操作,获取失败,则休眠⼀段时间(200ms)再去获
取;获取成功,则释放锁
⾸先读redis,不存在,读mysql,存在,写redis key的锁
整个流程⾛完,才让后⾯的服务器访问
2. 将很热的key,设置不过期
缓存雪崩
表示⼀段时间内,缓存集中失效(redis⽆ mysql 有),导致请求全部⾛mysql,有可能搞垮数据库,
使整个服务失效;
解决
1. 如果因为缓存数据库宕机,造成所有数据涌向mysql;
采⽤⾼可⽤的集群⽅案,如哨兵模式、 cluster模式;
2. 如果因为设置了相同的过期时间,造成缓存集中失效;
设置随机过期值或者其他机制错开失效;
3. 如果因为系统重启的时候,造成缓存数据消失;
重启时间短, redis开启持久化(过期信息也会持久化)就⾏了; 重启时间⻓提前将热数据导
⼊redis当中;
边栏推荐
猜你喜欢
随机推荐
es6新增-数组部分
Pointer advanced simple summary
ES6 latest commonly used knowledge dictionary (which can help you solve interview questions, problems in programming, etc.)
指针进阶简单总结
【LeetCode——编程能力入门第二天】运算符(位1的个数/整数的各位积和之差)
【C语言—零基础第十课】数组王国奇遇记
Baidu map realizes thermal map
运维安全要了解的二三事
ECS deployment web project
【C语言_复习_学习第二课】什么是进制?进制之间应该如何转换
遍历的方法总结
uniapp 表单(input、radio、picker)提交获取参数值
滚动轮加载的两种js方法及模态框拖拽归总
The principle and local storage of the throttle valve of the rotation chart are summarized
Markdown notes and related shortcut keys of typora
Multifunctional (Implementation) encapsulation function
实习项目1-个性化主页配置
Easypoi之excel多sheet导入
How to deal with the mismatch between subtitle files and video files
Wechat applet cloud development and use method-1









