redis 处理缓存击穿以及缓存雪崩
2024-10-06 00:24:57
缓存击穿
1. 缓存击穿简述
某一个热点数据在缓存中失效,请求穿过redis到达DB,造成DB压力过大
2. 怎么解决缓存击穿
1. 使用redis 作为分布式互斥锁(mutex lock)
实现步骤:
- 多线程请求redis (请求为空,若不做处理会发生缓存击穿)
- 请求分布式锁 (使用方式可以参考https://www.cnblogs.com/zhixinSHOU/p/14562405.html)
- 抢到锁的查询数据库,刷新redis,没抢到锁的线程sleep
- sleep时间结束返回 1
注:使用分布式锁的时候必须设置过期时间,否则会有死锁的风险
2. 提前更新缓存
前提是缓存数据未失效,可以在获取的时候判断过期时间是否快要失效了,如果是则返回缓存数据的同时重新更新该值的过期时间,如果该数据已经过期了,那么还是需要采用第一种解决方式
缓存雪崩
1. 缓存雪崩简述
和缓存击穿类似,但是区别是在于缓存击穿是某一个热点数据失效,而缓存雪崩是针对某一批的热点数据同时失效
2. 怎么解决缓存雪崩
1. 使用redis 作为分布式互斥锁(mutex lock)
和缓存击穿的解决方式类似
2. 过期时间设置随机值
可以在原有的失效时间基础上增加一个随机值,让缓存的失效时间错开,就可以有效的避免缓存雪崩。
最新文章
- mybatis一对多关联
- VS.Net 2015 Update3 学习(2) jquery-form, jquery-validation,jquery-validation-unobtrusive一起用
- ajava包的命名
- db2中报SQLCODE=-530, SQLSTATE=23503错误
- Oracle 12c SYSAUX表空间不足处理-清理audsys.cli_swp$a9b5f52c$1$1表
- Hadoop学习(1)-- 入门介绍
- joinfetch之意义
- Linux进程间通信-匿名管道
- J2EE开发常用开源框架技术(转)
- Python基础入门教程
- Printk与sched_clock_init的一点分析
- Cygwin Unable to get setup from *
- 【Selenium】Selenium IDE(alt+ctrl+s)
- Requests抓取有道翻译结果
- 【本地资源路径&;&;网络资源路径&;&;正反斜杠在Java中的用法】
- npm run dev/build/serve
- CentOS_6.5配置iptables防火墙策略
- 前端基础-- CSS
- 对中文进行MD5加密的注意事项(Java版,编码问题)
- RPC好,还是RESTful好?