week5. 总结心得

用户头像
dj_cd
关注
发布于: 2020 年 07 月 08 日

这周主要学习了分布式缓存架构、消息队列与异步架构

这里我主要罗列些对自己有较大的感触点:

1、什么是缓存Cache

缓存:存储在计算机上的一个原始数据复制集,以便于访问 - 维基百科

缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加快读取的速度。

2、无处不在的缓存:

CPU缓存

操作系统缓存

数据库缓存

JVM编译缓存

CDN缓存

代理与反向代理缓存

应用程序缓存

分布式对象缓存

3、缓存的关键指标

缓存命中率

缓存是否有效依赖于能多少次重用同一个缓存响应业务请求,这个度量指标被称作缓存命中率。

如果查询一个缓存,十次查询九次能够得到正确结果,那么它的命中率是90%。

影响缓存命中率的主要指标有:

缓存键集合大小

缓存可使用内存空间

缓存对象生存时间

4、缓存大概分为两种:通读缓存、旁路缓存

通读缓存:代理缓存,反向代理缓存,CDN缓存都是通读缓存;

通读缓存给客户端返回缓存资源,并在请求未命中缓存时获取实际数据。

客户端连接的是通读缓存而不是生成响应的原始服务器。

旁路缓存:对象缓存是一种旁路缓存,通常是一个独立的键值对(key-value)存储;

应用代码通常会询问对象缓存需要的对象是否存在,如果存在,它会获取并使用缓存的对象,如果不存在或已过期,应用会连接主数据源来组装对象,并将其保存回对象缓存中以便将来使用。

5、技术栈各个层次的缓存:

6、缓存是系统性能优化的大杀器:技术简单、性能提升显著、应用场景多,需要合理使用缓存:

6.1、使用缓存对提高系统性能有很多好处,但是不合理的使用缓存可能非但不能提高系统的性能,还会成为系统的累赘,甚至风险。实践中,缓存滥用的情景屡见不鲜:过分依赖缓存、不合适的数据访问特性等;

6.2、频繁修改的数据:这种数据如果缓存起来,由于频繁修改,应用还不及读取就已失效或更新,徒增系统负担。一般来说,数据的读写比在2:1以上,缓存才有意义;

6.3、没有热点的访问:缓存使用内存作为存储,内存资源宝贵而有限,不能将所有数据都缓存起来,如果应用系统访问数据没有热点,不遵循二八定律,即大部分数据访问不是集中在小部分数据上,那么缓存就没有意义,因为大部分数据还没有被再次访问就已经被挤出缓存了。

6.4、数据不一致与脏读:一般会对缓存的数据设置失效时间,一旦超过失效时间,就要从数据库重新加载。因此应用要容忍一定时间的数据不一致,如卖家已经编辑了商品属性,但是需要过一段时间才能被买家看到。在互联网应用中,这种延迟通常是可以接受的,但是具体应用仍需慎重对待。还有一种策略是数据更新时立即更新缓存,不过也会带来更多系统开销和事务一致性的问题。因此数据更新时通知缓存失效,删除该缓存数据,是一种更加稳妥的做法。

7、Redis 集群,目前是较主流的缓存组件;

8、消息队列与异步架构主要是需要充分掌握:同步调用与异步调用的场景;



用户头像

dj_cd

关注

还未添加个人签名 2019.08.09 加入

还未添加个人简介

评论

发布
暂无评论
week5. 总结心得