redis穿透、击穿、雪崩
时间: 2023-11-03 22:05:05 浏览: 116
redis缓存穿透是指在缓存中无法找到所需数据,导致每次请求都要穿透到数据库中查询,从而增加了数据库的负载压力。而redis缓存击穿是指某个热点key在过期时,同时有大量的请求访问该key,导致该key的缓存失效,请求直接打到数据库上,造成了数据库的压力瞬间增大。而redis缓存雪崩是指在某个时间点,缓存中的大部分数据同时失效,导致大量请求直接访问数据库,造成数据库瞬时压力过大。
解决redis缓存穿透的常用方法有三种:
1. 对于不存在的key进行缓存:可以设置一个空值或者默认值,避免对数据库的频繁访问。
2. 进行参数校验:可以在接口层面进行参数校验,拦截非法请求,减少对缓存和数据库的访问压力。
3. 布隆过滤器:可以使用布隆过滤器对请求进行过滤,将可能存在的全部key存入布隆过滤器中,只有在布隆过滤器中存在的key才会继续进行数据库查询。
解决redis缓存击穿的常用方法有两种:
1. 设置热点数据永不过期:将热点数据的过期时间设置为永不过期,这样可以保证热点数据的始终存在于缓存中,避免了缓存失效时对数据库的访问压力。
2. 加锁:使用分布式锁来解决缓存击穿的问题,当某个请求发现缓存失效时,使用分布式锁来锁定该key,然后进行数据库查询并更新缓存,其他请求在获取锁失败时,可以从缓存中获取数据,避免了对数据库的直接访问。
解决redis缓存雪崩的常用方法有三种:
1. 设置缓存过期时间随机:为了避免所有的缓存同时失效,可以为每个缓存设置一个随机的过期时间,使得缓存失效的时间点分散开。
2. 使用集群和主从复制:通过使用多个redis节点进行数据复制,保证了缓存的高可用性,即使其中一个节点失效,也可以从其他节点获取数据。
3. 引入缓存预热:在系统访问高峰之前,可以提前加载热点数据到缓存中,避免在高峰期间缓存失效导致的数据库压力过大。
总结一下:
- 解决redis缓存穿透的方法有:对不存在的key进行缓存、进行参数校验、使用布隆过滤器。
- 解决redis缓存击穿的方法有:设置热点数据永不过期、使用分布式锁。
- 解决redis缓存雪崩的方法有:设置缓存过期时间随机、使用集群和主从复制、引入缓存预热。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)