redis缓存
缓存穿透(缓存穿透是指恶意或异常的查询请求导致缓存系统无法命中缓存,每次请求都要查询数据库或其他存储后端,导致数据库或存储系统压力过大的问题)
- 缓存空数据
- 布隆过滤器
缓存击穿(缓存击穿是给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB给压垮)
- 逻辑过期(逻辑过期,意味着永不过期。缓存击穿问题产生的原因是某个热点key过期了,请求都打到数据库了,造成数据库压力过大。因此我们可以提前准备一个不过期的热点key ,不设置它的过期时间,将这个key保存到redis中,这样理论上总能命中redis。那是怎么判断这个key逻辑上过期了?答案是这个key的value存储一个过期时间,我们判断这个key是否过期的依据,就是这个key的value保存的过期时间。)
缓存雪崩
- 给不同的key的过期时间设置添加一个随机值,降低同一个时段大量key同时过期的概率
- 如果redis服务宕机,可以利用redis一些高可用的方案 比如哨兵模式,集群模式
- 给缓存业务添加降级限流策略 可以利用ngxin或者getway
- 给业务添加多级缓存 Guava或者caffeine为一级缓存,redis为二级缓存