redis学习-缓存穿透、缓存击穿、缓存雪崩

1.缓存穿透

大量查询数据库中没有的数据。

当用户在redis缓存中查询不到想要的信息时,会进入数据库中查询,此时如果同一时间有大量用户从redis中查询不到信息,就都会去数据库中查询,此时数据库就可能会因为压力过大而停止服务,这就是缓存穿透。

解决办法:

  • 布隆过滤器

是一种数据结构,对所有可能用到的参数以hash形式存储,当用户发起查询时会先在控制层进行校验,如果没有所请求信息的参数就不会进入数据库中查询,从而过滤掉这些对不存在信息的查询请求,减轻了数据库的压力。

  • 缓存空对象

即如果在数据库中查询不到,redis就会存储一个空串并附上过期时间,当再次查询这条信息时就会直接从redis中获取这个空串,避免短时间内再次从数据库中查询的现象。

这种方式有两个缺点,一是可能会出现一致性的问题,在过期时间内如果数据库中新增了这条信息,redis只能等空串过期后才可能发现,这就会出现redis和数据库中的信息不一致的情况;二是这种方法会在redis中存入大量空串进而占用redis的内存。

2.缓存击穿

大量查询redis中过期的热点数据。

一般是由于热点数据造成的。如果热点数据刚好过期,此时若有大量用户再次请求这些数据,就只能去数据库中查询,这很可能就会导致数据库在这一时间压力过大而停止服务。

解决办法:

  • 过期时间设置为永久

当设置为永久后,这些数据就不会过期,所以就不会出现缓存击穿的现象。但这些数据会囤积在redis中,可能会造成内存不足的问题。

  • 使用分布式锁

使用分布式锁用来保证对于同一条信息同一时间内只有一个线程能够访问数据库,其他线程只能等待,这就将高并发的压力转移到了分布式锁上。虽然减轻了数据库的压力,但考验分布式锁。

3.缓存雪崩

当大量热点数据集中过期后,如果这些热点数据被频繁使用将对数据库造成大量周期性压力;其中缓存服务器宕机造成的雪崩损失比较大,因为一旦宕机压力就都会转移到数据库上,这带来的风险是无法预知的。

解决办法:

  • redis高可用

既然缓存服务器宕机造成的风险较大,不如多设几台缓存服务器,当一台服务器宕机后可以使用其他服务器继续工作,其实就是搭建集群。

  • 限流降级

当热点数据过期后,可以通过加锁或者队列来限制同一时间对同一数据的访问量,其他访问请求等待。

  • 数据预热

在出现高并发访问之前先将可能高频访问的数据访问一遍,这样这些数据就会存到内存中,保证了访问开始后的一段时间内这些热点数据不会过期。

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
知我Deja_Vu4 天前
redisCommonHelper.generateCode(“GROUP“),Redis 生成码方法
数据库·redis·缓存
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习
Charlie_lll4 天前
Redis脑裂问题处理——基于min-replicas-to-write配置
redis·后端