您的当前位置:首页正文

redis-缓存三剑客(缓存击穿,缓存穿透,缓存雪崩)

2024-11-24 来源:个人技术集锦

缓存三剑客(缓存击穿,缓存穿透,缓存雪崩)

缓存击穿

请求一个不存在的数据时,请求到数据库,数据库不存在该数据,会导致每次请求都会到数据库

解决方案:
缓存空数据,并设置过期时间
使用布隆过滤器,在每次请求前判断key是否存在,不存在则直接返回。//布隆过滤器会有误判的几率,可以通过增加bitMap长度来解决

缓存穿透

当热点key过期时,突然大量请求访问,直接访问到数据库

解决方案:
互斥锁:当请求未命中key时,先获取互斥锁(分布式锁),再通过查询建立缓存数据,写入缓存再释放锁。保证数据强一致,性能差,

逻辑过期:在value中添加过期时间标识,通过该参数判断是否过期。
当请求未命中key时,先获取互斥锁(分布式锁),开启新线程进行查询和建立缓存数据,并重新写入逻辑过期时间,再释放锁,请求不需要等待新线程执行结束,直接返回未命中结果。高可用 性能高 不能保证数据一致性,重视用户体验

缓存雪崩

大批量的key同时失效,或redis宕机,导致大量的请求直接访问数据库

解决方案:
1 大量key失效的场景:过期时间随机,分批设置过期时间
2 服务宕机的场景:
通过集群提高服务的可用性,例:哨兵模式,集群模式
服务降级,限流。例:nginx,gateway
3 给业务添加多级缓存

显示全文