redis缓存穿透
- 简介
null值问题。缓存数据先从缓存查询,再从数据库查询。如果key值不存在,则从db中获取。这样大量的请求,缓存失效,给服务器造成压力。 - 解决方法
方法一:key值不存在的也保存在缓存中,设置短的过期时间,缓解db的压力。
方法二:布隆过滤器,即对一定不存在的key进行过滤。把所有可能的key值放到bitmap中,查询时根据bitmap过滤。
redis缓存雪崩
- 简介
大量key缓存失效不可用问题。缓存服务器重启或大量key同一时刻失效,导致缓存不可用,给db造成很大压力。 - 解决方法
方法一:不同的key设置不同的过期时间,防止同一时间段同时过期。
方法二:缓存失效后,通过加锁或队列控制读数据库写缓存的线程的数量。比如对某个key只允许一个线程去读数据库写缓存,其他可以从缓存中读取。
方法三:设置二级缓存,一级缓存失效后,读取二级缓存,二级缓存为长时间缓存。
redis缓存击穿
-
简介
同一key缓存失效。 热点数据在某个时间点过期,恰好这时大量的请求访问这个可以,需要从db中查,给数据库造成很大压力。 -
解决方法
使用redis的setnx互斥锁,一个线程从数据库中取数据,加入缓存,其他线程从缓存中取数据。