缓存更新策略
1.lru/lfu/fifo - redis自带,根据maxmemory-policy设置,数据无法保证一致性
2.超时剔除 - 设置expire,存在一定时间不一致问题
3.主动更新 - 建议与超时剔除一起使用,一致性最好
低一致性使用最大内存,超时剔除策略一起使用
高一致性使用超时剔除和主动更新策略一起使用(避免主动更新出问题后缓存瘫痪)
缓存粒度
缓存粒度应适中,避免不必要内存,网络浪费(只缓存重要字段)
缓存穿透
1.缓存空对象(数据变化频繁场景)(缓存空间占用较多)
2.布隆过滤器(数据变化小场景)
无底洞优化
更多的节点意味着更多的网络消耗,批量操作更耗时,当节点增加到一定程度,再增加节点并无法提高性能
优化:
1.命令优化
2.减少网络次数
3.降低连接成本(长连接,连接池,nio)
缓存雪崩
1.保证缓存高可用(sentinel、cluster)
热点key问题 - p361
2.高并发下缓存失效后多个线程同时申请建立缓存
解决:
1.互斥锁,同时只能有一个线程申请建立缓存(setnx锁),其它线程等待重新读。(保证缓存构建时间较短)
2.永远不过期(定期构建缓存)(重构期间数据不一致)
网友评论