第五周总结
分布式缓存架构
缓存是什么?
什么是缓存?缓存是存储在计算上的一个原始数据复制集,以便于访问。
缓存是数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加快读取的速度。
缓存有哪些应用?
CPU 缓存
操作系统缓存
数据库缓存
JVM 编译缓存
CDN 缓存
代理与反向代理缓存
前端缓存
应用程序缓存
分布式对象缓存
缓存的指标
缓存命中率:缓存是否有效依赖于能多次重用同一个缓存响应业务请求,这个度量指标被称为缓存命中率
影响缓存命中率的因素:
key 大小
缓存可用内存空间
缓存对象生命周期
缓存两种形式
通读缓存(read-through)
代理缓存、反向代理缓存、CDN 都是通读缓存,通读缓存给客户端返回缓存资源,并在未命中缓存时获取实际数据,客户端连接的是通读缓存而不是生成响应的原始服务器
旁路缓存(cache-aside)
对象缓存是一种旁路缓存,旁路缓存是一个独立的 key-value 存储。应用代码通常会访问
if cache.contains(key){
return cache.get(key)
}else{
value:=datasource.get(key)
cache.put(key,value)
return value
}
浏览器对象缓存:localstorage,应用程序缓存:进程内 memory
远程分布式对象缓存
一致性 hash,hash 环+虚拟节点(再次印证计算机科学领域的问题都可以通过增加一个虚拟层来解决,烧烤!?)
各种介质数据访问延迟
技术栈各层次缓存
缓存为什么能显著提升性能
速度快
无需计算,减少 cpu 使用
分担数据库、磁盘、网络的负载压力,使其有更好的响应性
缓存为何百试不爽?
简单
性能提升显著
场景多
使用缓存的条件
适合读多写少的数据,读写比大于 2:1 才有意义
有热点访问
具备一定的不一致的耐受性
使用缓存需面对的问题
缓存雪崩
缓存预热
缓存穿透
Redis 集群
redis 集群预先分好 16384 个桶,put 时 CRC16(key)mod 16384,决定桶
物理节点映射到[0-16384]上,cluster 维护映射关系
客户端与 redis 节点直连,无需连接所有节点,只连接任何一个可用节点
所有 redis 节点彼此互联
评论