缓存技术梳理
2021-05-11 15:38:47 33 举报
AI智能生成
关于缓存技术与缓存性能方面的梳理
作者其他创作
大纲/内容
通用规范
缓存原理
高性能
降低数据库的查询压力
提高响应速度
高并发
替代数据库进行高并发访问
名词
缓存命中
缓存Miss
存储成本
缓存失效
缓存污染
缓存淘汰
淘汰策略
FIFO
LRU
LFU
组件约束
redis
避免全键扫描
getAll
ehcache
内存使用
多级缓存
应用链
浏览器缓存
边缘CDN缓存
反向代理Nginx缓存
远程缓存服务
本地缓存
数据库缓存
形式
内部缓存
数据暂存与缓冲
一级缓存
读写频繁
二级缓存
一级缓存一致性保障
读缓存逻辑缺陷
缓存穿透
原因:由于在缓存和数据库均会Miss的Key,导致每次请求会穿透缓存到数据库中
解决措施
将双Miss的key作为空对象放到缓存中,并给定过期时间
访问层拦截,在进入缓存查询前进行过滤
业务过滤
BloomFilter
查询/插入效率:时间/空间-O(1)
数据安全性
正确率与数量正相关
扩展长度
假阳性错误
不能删除元素
缓存击穿
原因:缓存在过期后到更新的这段时间内,在高并发场景所接受到的热Key请求都会击穿缓存到数据库中
解决措施
缓存永不过期
异步更新缓存
缓存更新设置在过期之前
互斥锁,缓存失效时保证唯一访问请求,缓存更新后释放锁,其他请求等待锁释放
缓存雪崩
原因:缓存在同一时间过期导致热Key大量请求数据库导致数据库雪崩连锁现象
解决措施
错开缓存过期时间
random-TTL
互斥锁
写缓存模式
Cache Aside
先更新数据库,然后让缓存失效
?
并发更新覆盖
读写混合双打
读写失效混合
懒加载原则,减少不必的性能开销
R/W Through
只面向缓存操作
Read Through
1)缓存命中直接返回
2)缓存未命中,缓存自己从数据库加载到缓存中返回
2)缓存未命中,缓存自己从数据库加载到缓存中返回
Write Through
1)未命中缓存直接更新数据库返回
2)命中缓存直接更新缓存,缓存服务自己同步数据库
2)命中缓存直接更新缓存,缓存服务自己同步数据库
Write Behind Cache Pattern
只更新缓存直接返回,效率高
异步更新数据库
使用经验
一致性失效
逻辑失败
并发时序场景
队列串行化
物理失败
缓存操作耗时/数据库操作耗时相互制约
异步队列处理操作
缓存策略
过期 OR NOT?
不过期策略
读写比非常高
缓存可利用空间大
过期策略
缓存更新逻辑复杂
缓存更新成本/能耗高
定时全量更新
缓存结构
维度化拆分
多维度缓存
增量更新
大Value对象
拆分聚合
压缩对象
热点缓存
多级缓存
读写分离
缓存预热
运行存储成本高
全量预热
局部热点预热
缓存性能
Java GC
大对象
命中率
业务时效性要求
更新策略
过期时间
细颗粒度
减少更新
缓存淘汰策略
空间限制
失效容灾
取模
一致性哈希
网络
数据传输序列化方式
缓存连接池
缓存协议适用性
ehcache
RMI/JMS
redis
ReSP
TCP
memcached
TCP
自监控
监控失效节点
监控缓存使用负载
监控预期热点数据
监控非预期热点数据
使用原则
优先用于解决系统性能瓶颈
缓存设计不当
降低系统性能
不会自我恢复
徒增维护成本
提高吞吐量和并发数
高并发场景数据一致性逻辑的思考
其他方面的综合考虑:如开发成本、安全性、封闭性等
技术与业务相符
没有最优,只有最适合的
寻找技术与业务的最优契合点,才是最重要的
0 条评论
下一页