解决方案:
缓存空数据,并设置过期时间
使用布隆过滤器,在每次请求前判断key是否存在,不存在则直接返回。//布隆过滤器会有误判的几率,可以通过增加bitMap长度来解决
解决方案:
互斥锁:当请求未命中key时,先获取互斥锁(分布式锁),再通过查询建立缓存数据,写入缓存再释放锁。保证数据强一致,性能差,
逻辑过期:在value中添加过期时间标识,通过该参数判断是否过期。
当请求未命中key时,先获取互斥锁(分布式锁),开启新线程进行查询和建立缓存数据,并重新写入逻辑过期时间,再释放锁,请求不需要等待新线程执行结束,直接返回未命中结果。高可用 性能高 不能保证数据一致性,重视用户体验
解决方案:
1 大量key失效的场景:过期时间随机,分批设置过期时间
2 服务宕机的场景:
通过集群提高服务的可用性,例:哨兵模式,集群模式
服务降级,限流。例:nginx,gateway
3 给业务添加多级缓存