缓存三剑客(穿透,雪崩,击穿)理解

缓存穿透

概念理解

缓存穿透正如其名穿透,说明访问的数据在缓存和数据库里都没用,而且此时还大量的发起了访问,导致数据库崩溃

解决方法

一、第一种解决方法就是保存空值在数据库里面,但是这种情况会很消耗空间

二、第二种办法就是使用布隆过滤器,当有数据来访问的时候,布隆过滤器检查一下如果缓存里没有,直接返回回去,此时布隆过滤器也有一定的弊处,假如我此时访问的数据是刚刚好过了我redis的过期时间,但是此时mysql里面还有数据,那不就可惜了吗?所以有一种方式叫缓存预热(缓存预热就是相当于我设置的数据过期时间是个假时间,什么意思呢?就是相当于我过期时间到了但是我不会将此时在缓存里的数据删除,而是将这个旧数据一直存储在缓存当中,当有数据访问这个缓存的时候,我先返回旧数据,再向数据库发请求获取新数据来更新,但是如果用了缓存预热这种技术的话就不能再使用惰性删除了)

缓存雪崩

概念理解

缓存雪崩,这个也如其名雪崩,为什么会雪崩呢?首先最先能想到的就是redis宕机了,缓存不管用了,大量数据打到了数据库上,还有什么原因呢?还有就是大量缓存失效了,同样会造成大量数据打到数据库上,造成数据库崩溃。那么应该如何解决呢?

解决方法

一、首先便是给每个缓存设置过期时间,避免大量缓存同时失效的情况

二、还能用分布式锁来做一个限制,当缓存失效之后,只允许一个请求进数据库来获取,其他的请求等待,这样的话不好的也就是会造成等待时间很长

缓存击穿

概念理解

对于缓存击穿而言,那就很简单了,他是击穿而不是穿透,说明了什么说明了他在数据库里有,也就说明此时是一个高频请求,怎么会造成这种影响呢?首先最应该想到的就是一个高频请求的缓存key失效了,导致所有的请求都打在数据库上

解决方法

一、此时能怎么解决呢?首先就是获取一个互斥锁,如果获取成功则直接从数据库中获取数据并更新缓存,避免其他请求同时访问数据库

二、其次就是设置热点key的ttl永不过期,或者使用缓存预热也可以。

相关推荐
daixin884810 小时前
什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
java·开发语言·redis·缓存
daixin884812 小时前
Redis过期数据的删除策略是什么?有哪些?
数据库·redis·缓存
EmpressBoost13 小时前
谷粒商城170缓存序列化报错
java·spring·缓存
幻灭行度15 小时前
通过redis_exporter监控redis cluster
数据库·redis·缓存
forestsea16 小时前
Caffeine 缓存库的常用功能使用介绍
java·缓存·caffeine
冷崖18 小时前
Redis缓存策略以及bigkey的学习(九)
redis·学习·缓存
雪*夹雨夹*雪20 小时前
CPU 为什么需要缓存?揭开速度与效率的底层逻辑
缓存
love530love20 小时前
Windows 如何更改 ModelScope 的模型下载缓存位置?
运维·人工智能·windows·python·缓存·modelscope
szx042721 小时前
缓存HDC内容用于后续Direct2D绘制.
c++·缓存·directx·d2d·direct2d·dx·gdi+dx
Heidi__1 天前
前端数据缓存机制详解
前端·缓存