老师总结的“缓存的概念是相对的,基于不同的背景或应用场景,缓存所映射的存储设备是不一样的” 印象很很深刻。
计算机冯诺依曼模型中的不同部分的数据读写速度差别很大:CPU>内存>磁盘 因为这个根本的原因演化出不同场景的缓存技术。
总结留言区看到的,老师讲的和我自己想到的一些思考:
1.计算机体系结构中的缓存,CPU和内存之间有三级缓存,这个是固化在硬件中了
2.网络访问中的缓存,通过网络访问数据时,需要与远程服务器交互来进行传输,将经常访问的数据缓存在磁盘,减少网络请求的次数
3.内存和磁盘文件数据交互的时候,内存中会缓存磁盘数据页码信息(索引信息),数据交互的时候用这个索引数据定位具体位置
4.DNS解析域名的时候,不会每次都到根服务器取查询,会将最域名对应的IP地址缓存到最近的路由器里
不同的应用场景,如果两个模块需要做数据交互,但是二者的处理能力不一致,我们都一个在两者之间搭建一个桥梁缓解这种不平衡
前面讲的1,2,3,4是数据缓存,我觉得缓冲也是为了解决两者处理能力不平衡的问题,比如批量技术,比如压缩技术也是。
我的方面记忆的例子:
一个前端请求进来,做域名解析的时候DSN需要做地址解析缓存;
如果有静态资源访问,cdn可以缓存静态资源,nginx可以缓存静态网页
请求到达应用实例需要查询数据库的数据给用户,如果数据是热点数据,或者不怎么变的数据,可以在redis做数据缓存
如果一定要查询数据库,通过数据库的索引(索引一般缓存到内存)可以快速定位到数据所在的位置,
如果需要查询的数据页当前没在内存中,现在需要从磁盘文件中获取,最后才讲数据返回给用户
用户可以在客户端自己缓存一些不怎么变化的数据,减少查询的次数
如果这个请求访问A系统,A系统还需要通过RPC、http、rmi等网络访问B系统获取数据,这个时候A和B交互也可以做缓存
为了平衡模块之间处理能力不平衡,可以用缓存,缓冲
为了减少模块之间的交互,提高处理效率,可以用缓存,缓冲
展开