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

1.缓存穿透

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

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

解决办法:

  • 布隆过滤器

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

  • 缓存空对象

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

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

2.缓存击穿

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

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

解决办法:

  • 过期时间设置为永久

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

  • 使用分布式锁

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

3.缓存雪崩

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

解决办法:

  • redis高可用

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

  • 限流降级

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

  • 数据预热

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

相关推荐
繁星星繁2 小时前
C++11学习笔记
c++·笔记·学习
悟能不能悟7 小时前
redis的红锁
数据库·redis·缓存
@小博的博客7 小时前
【Linux探索学习】第二篇Linux的基本指令(2)——开启Linux学习第二篇
linux·运维·学习
007php0079 小时前
某大厂跳动面试:计算机网络相关问题解析与总结
java·开发语言·学习·计算机网络·mysql·面试·职场和发展
知识分享小能手10 小时前
微信小程序入门学习教程,从入门到精通,微信小程序核心 API 详解与案例(13)
前端·javascript·学习·react.js·微信小程序·小程序·vue
递归不收敛10 小时前
吴恩达机器学习课程(PyTorch 适配)学习笔记:3.3 推荐系统全面解析
pytorch·学习·机器学习
qq_54702617912 小时前
SpringBoot+Redis实现电商秒杀方案
spring boot·redis·后端
又是忙碌的一天12 小时前
前端学习 JavaScript(2)
前端·javascript·学习
蒙奇D索大12 小时前
【数据结构】考研数据结构核心考点:二叉排序树(BST)全方位详解与代码实现
数据结构·笔记·学习·考研·算法·改行学it
玲娜贝儿--努力学习买大鸡腿版12 小时前
推荐算法学习笔记(十九)阿里SIM 模型
笔记·学习·推荐算法