redis缓存穿透,缓存击穿,缓存雪崩
2024-09-01 23:40:14
缓存穿透
缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就会绕过缓存直接查数据库,这也是经常提的缓存命中率问题。
解决办法:
1.我们任然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。通过这个直接设置的默认值放到缓存,这样第二次到缓存中获取就有值了
2.布隆过滤器
缓存击穿
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
解决方案:
1.设置热点数据永远不过时。
2.加互斥锁。
缓存雪崩
我们可以简单理解为: 由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本就应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成了巨大压力,严重会造成数据库磊机。从而形成一些列连锁反应,造成整个系统奔溃。
解决办法:
1.大多数系统设计者考虑用锁(最多的解决方案)或者队列的方式保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。
2.缓存数据的过期时间随机,防止同一时间大量数据过期现象发生。
最新文章
- Linux下的压缩和解压缩命令——jar
- JavaScript中的匿名函数及函数的闭包
- js圣诞节倒计时网页
- hive 基本语法
- 删除注释云平台JS,加快DISCUZ访问
- Golang 安装及配置教程 for Mac
- 24 个你应该了解的 PHP 库
- 2016 Multi-University Training Contest 5 ATM Mechine
- 51nod1394 差和问题
- Hive1.3 JDBC连接-代码片段
- Android学习准备
- 【问题】tableView的每组的头部不不能滚动的解决方案
- Ubuntu中编译链接Opencv应用的简便方式
- python爬虫入门-开发环境与小例子
- 【ZJOI2008】树的统计(树链剖分)
- Day 2 下午
- 将mnist获得的数据还原成图片形式
- UVA - 12169 -扩展欧几里得算法
- Java技术----Java泛型详解
- django-mvvm(django的FormObject)