缓存中常见的概念及解决方案
缓存中常见的概念及解决方案
缓存穿透
1、概念
用户查询数据,在数据库中以及缓存中(redis)都查询不到,导致每次请求来时,缓存(redis)中查询一次,数据库查询一次,最后返回空,每次请求都会有俩次无用的查询,缓存命中率低
2、解决方案
- 对null值设置缓存,每隔一段时间过期
- 使用布隆过滤器缓存需要的值,直接过滤 掉找不到值得key
缓存雪崩
1、概念
缓存(redis)服务挂掉,缓存在同一时间发生大面积的实效,请求每次查完数据未能将数据缓存倒数据库中,导致所有的请求都会去查询数据库,造成同一时间数据库的cpu及内存负载过高的问题,甚至宕机。
2、解决方案
1)redis高可用,使用哨兵部署或者集群部署模式,保证缓存服务的高可用
2)为key设置不同的过期时间,让key的过期时间均衡分布,防止同一时间缓存大面积的实效。
3)使用锁和队列,对请求进行异步处理,降低数据库的压力。
4)使用缓存降级策略(使用guava或ehcache等本地缓存 或者对服务访问进行限流、熔断及降级)
缓存击穿
1、概念
某个key非常热点,在不停的坑着大并发,大并发集中对这一个点进行访问,当这个key失效的瞬间,持续的高并发会击破缓存,直接请求数据库,导致数据库的cpu及内存负载过高,甚至宕机。
2、解决方案
1)设置某些热点key的过期时间(延长或者永不过期)
2) mutex key互斥锁