使用场景缓存穿透原因查询一个空数据mydql查询不到数据也不会直接写入缓存导致每次都访问数据库可能会宕机1.缓存空数据但是内存消耗高2.布隆过滤器使用哈希算法里面存二进制0和1初始都为0但是会有误判数组越大 误判率会降低数据不存在直接拦截存在查询则查redis缓存击穿一个热点key设置过期时间恰好这个时间有大量用户访问进来导致这些并发请求可能会把数据库瞬间压垮解决方法1.互斥锁2.逻辑过期缓存雪崩同一个时段有多个key同时过期或者redis服务宕机导致大量请求访问数据库解决方法1.设置ttl添加随机值2.利用redis集群提高高可用性比如哨兵模式集群模式3.给业务添加多级缓存4.给缓存业务添加降级限流策略双写一致1.先修改数据库在删除缓存2.延迟双删降低脏数据主从分离所以要延迟3.互斥锁缓存读多写少读写锁所以有共享锁排他锁**可以保持强一致 但是性能方面不高**共享锁允许其他线程读取数据但不允许写排他锁拒绝其他现成读跟写mq异步通知