一期二班 - 吴水金 - 第五课总结
什么是缓存?
存储在计算机上的一个原始数据复制集,以便于访问。
缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取时,用于加快读取的数据。
通常使用 hash 表访问缓存中的数据。hash 表的时间复杂度为 O(1 )
缓存 Cache 和缓冲 Buffer 的区别?
Buffer 用于在高速设备和低速设备之间缓冲数据读取
缓存的关键指标
缓存命中率:如果一个缓存,十次查询有九次能够得到正确的结果,那么它的命中率为 90%。
影响缓存命中率的主要指标:
1.缓存键集合的大小
键集合越小,缓存命中率越高
2.缓存可使用的内存空间
内存空间越大,缓存的对象越多,命中率越高。
3.缓存对象生存时间
时间越长,重用率越高。
常见的缓存形式:
代理缓存
代理服务器上的缓存
反向代理缓存
反向代理上的缓存,用于响应用户请求。
多层反向代理缓存
CDN 内容分发网络
通读缓存
给客户端返回缓存资源,并在请求未命中时获取实际数据。客户端连接的是通读缓存而不是原始服务器。
旁路缓存
对象缓存是一种旁路缓存,旁路缓存通常是一个独立的键值对存储。
一个用代码通常会询问对象缓存需要的对象是否存在,如果存在,会使用缓存的对象,如果不存在,会连接数据源获取对象,并将对象保存在
旁路缓存以便将来使用。
远程分布式对象缓存
memcached 分布式对象缓存
share nothing 模式
一致性 hash 算法
各层次的缓存
客户端缓存:节省 100%资源,不需要请求服务器。
http 反向代理/cdn:节省 98%资源。
web 应用服务器本地缓存/分布式缓存:节省 75%资源。
http 反向代理:节省 66%资源。
web 服务服务器本地缓存/分布式缓存:节省 50%资源。
主数据存储:节省 0%资源。
合理使用缓存
不合理地使用缓存会使缓存成为系统累赘。
不能使用缓存地数据:
频繁修改地数据。数据读写比在 2:1 以上,缓存才有意义。
没有热点的访问。二八定律,80%的访问集中在 20%的数据上。LRU,最近,最久没有被访问的数据。
数据不一致与脏读。
缓存雪崩
缓存预热
缓存穿透:访问一个不存在的数据,即使不存在的数据也应该写入到缓存中。
Redis 缓存服务器
memcached 缓存服务器
计算机科学只有三件事最困难:缓存失效,命名事务,计数错误。--Phil Karlton
如何避免系统故障传递
读数据性能优化:缓存
写数据性能优化:消息队列
同步调用和异步调用
使用消息队列实现异步调用
生产者,消费者架构
点对点模型:消息只被消费一次
发布订阅模式:消息一次生产,多次消费。
消息队列能提供更好的伸缩性,能够实现消峰填谷,进行失败隔离和自我修复。
生产者和消费者相互独立,不会相互影响。
时间驱动架构 EDA
消息队列产品:kafka
版权声明: 本文为 InfoQ 作者【吴水金】的原创文章。
原文链接:【http://xie.infoq.cn/article/7afacb640fdaf83c62efd0de1】。文章转载请联系作者。
评论