27 | 分布式数据之缓存技术:“身手钥钱”随身带
聂鹏程
该思维导图由 AI 生成,仅供参考
你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
不知不觉,分布式数据存储这一站已经到了最后一讲。在前面几讲,我与你分享了 CAP 理论、分布式存储系统的三要素(顾客、导购和货架)、数据分布式分片方法和数据复制技术,其中数据分片方法和数据复制技术均是导购中的关键技术。
在这一讲,我将为你讲解分布式存储中“货架”的关键技术——缓存技术。
在计算机领域的各个方面,缓存都非常重要,是提升访问性能的一个重要技术。为什么这么说呢?
从单个计算机的体系结构来看,内存和处理器速度差异很大,如果不采用缓存技术,处理器的性能会受到很大的限制。
再看计算机应用,如果不采用缓存技术,对于每个请求,应用都要与后台数据库做一次交互,而数据库中的数据存储在磁盘上,因此每次请求都要和磁盘做交互,而磁盘访问的性能很低,造成访问延迟。
除此之外,还有网络访问,如果没有缓存机制,每次访问主机都要与远程机器做交互,速度又可想而知。
接下来,我们就一起打卡分布式缓存技术吧。
什么是分布式缓存?
打比方来说,缓存技术其实就像一个水缸,平时它会存储一定的水,而这些水就来自深井。如果每次都去深井打水,一方面井口比较小,导致一次能接收的用水请求有限;另一方面,井比较深,打水的工序比较复杂,导致所需时间比较长。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
分布式缓存技术在计算机领域扮演着重要角色,类似于一个水缸,存储着常用的数据以提高访问效率。本文介绍了分布式缓存的概念和原理,以及主流的分布式缓存系统Redis和Memcached。分布式缓存技术通过将热门数据存储在离用户近、离应用近的位置,并尽量存储到更快的设备,以减少远程数据传输的延迟,从而提高用户和应用的数据访问速度。Redis支持多数据结构、持久化和主备同步,而Memcached则采用一致性哈希的集群结构,仅支持简单的k/v数据类型,不支持持久化,需要第三方实现主备。通过对比分析,读者可以更全面、深入地了解这两个分布式缓存系统的特点和适用场景。 此外,文章还介绍了计算机体系结构中的缓存和网络中的缓存。计算机体系结构中的缓存是指专用的缓存设备,而网络访问中的缓存通常是指本地的“磁盘”。这些不同类型的缓存在不同背景和应用场景下发挥着重要作用。 总的来说,本文通过生动的比喻和详细的技术介绍,帮助读者深入了解了分布式缓存技术及其在计算机领域的重要性。同时,通过对比分析不同分布式缓存系统的特点和适用场景,读者可以更好地选择适合自己需求的系统。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式技术原理与算法解析》,新⼈⾸单¥59
《分布式技术原理与算法解析》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- 高志强老师我有个疑问,redis节点不可以使用一致性哈希么,我觉得它只是个算法,不能是memcached的专用吧
作者回复: 一致性哈希是一个算法,这个观点我非常赞同,并不是说该算法是memcached的专用,而是不同的框架在进行设计时,所针对的业务场景或方案侧重点不一致,甚至是架构师的设计思路等不一致,会导致不同的框架采用不同的算法。
2020-04-021 - Eternal老师总结的“缓存的概念是相对的,基于不同的背景或应用场景,缓存所映射的存储设备是不一样的” 印象很很深刻。 计算机冯诺依曼模型中的不同部分的数据读写速度差别很大:CPU>内存>磁盘 因为这个根本的原因演化出不同场景的缓存技术。 总结留言区看到的,老师讲的和我自己想到的一些思考: 1.计算机体系结构中的缓存,CPU和内存之间有三级缓存,这个是固化在硬件中了 2.网络访问中的缓存,通过网络访问数据时,需要与远程服务器交互来进行传输,将经常访问的数据缓存在磁盘,减少网络请求的次数 3.内存和磁盘文件数据交互的时候,内存中会缓存磁盘数据页码信息(索引信息),数据交互的时候用这个索引数据定位具体位置 4.DNS解析域名的时候,不会每次都到根服务器取查询,会将最域名对应的IP地址缓存到最近的路由器里 不同的应用场景,如果两个模块需要做数据交互,但是二者的处理能力不一致,我们都一个在两者之间搭建一个桥梁缓解这种不平衡 前面讲的1,2,3,4是数据缓存,我觉得缓冲也是为了解决两者处理能力不平衡的问题,比如批量技术,比如压缩技术也是。 我的方面记忆的例子: 一个前端请求进来,做域名解析的时候DSN需要做地址解析缓存; 如果有静态资源访问,cdn可以缓存静态资源,nginx可以缓存静态网页 请求到达应用实例需要查询数据库的数据给用户,如果数据是热点数据,或者不怎么变的数据,可以在redis做数据缓存 如果一定要查询数据库,通过数据库的索引(索引一般缓存到内存)可以快速定位到数据所在的位置, 如果需要查询的数据页当前没在内存中,现在需要从磁盘文件中获取,最后才讲数据返回给用户 用户可以在客户端自己缓存一些不怎么变化的数据,减少查询的次数 如果这个请求访问A系统,A系统还需要通过RPC、http、rmi等网络访问B系统获取数据,这个时候A和B交互也可以做缓存 为了平衡模块之间处理能力不平衡,可以用缓存,缓冲 为了减少模块之间的交互,提高处理效率,可以用缓存,缓冲2019-11-3016
- leslie其实目前应当是mongodb在走向主流:它所承担的东西/事情在越来越重,关系型数据库由于Nosql的变化而自身在主动变化。举个例子:mysql 5.7之前不支持json,但是5.7开始支持了。memcached的应当十余年了:它的出现就是充分利用了内存。 这条界线我个人一直觉得在越来越模糊:随着硬件代价的变化,各种方式在不断的调整自身的重点和特性去更好的去服务生产环境。甚至我觉得:关系型和非关系型这条界线都在淡化,只是适用场景不同-仅此而已。2019-11-277
- 钱还好REDIS现在几乎是标配,之前也学习过一下。记录自己的理解,缓存思想我觉得处处可见,因为缓存的核心作用就是提速,只要是能提速的操作方式或设备广义上都是一种缓存思想的运用。 而且我觉得基本上有三种运用方式: 1:把东西或者数据放在更快的设备上 2:把一下可预知的慢动作提前做好 3:把东西或数据放到离使用者更近的位置 现在是疫情期间,我在家隔离上班,一个人做饭其实比较麻烦,因为吃的不多但是做饭花费的时间却不少,怎么办?运用缓存的思想就是,一次做一天的饭,这样第二、三顿饭的烹饪时间就会大大减少,直接热一下就可以开吃了!另外,就是买直接可食用的食物,这些东西先做肯定花费时间,不过由工厂提前做好,提前预备着,我想吃只需要购买就行啦! 不管什么存储系统,存取的操作最为关键,怎样能最快的存取都是其核心,对于任何存储系统搞明白了这个算是明白这个存储系统的核心了。就单条数据而言散列应该是最快的一种方式了。2020-02-195
- 阿卡牛缓存的思想在计算机和网络中无处不在,根本的原因是不同的硬件速度并不知道匹配。我们想最大化地利用硬件资源提高系统的性能。就是不想某些设备忙成狗而另一些设备却葛优瘫,真是“黑心“老板:)2019-11-301
- 蓝魔丶老师有个问题:redis集群的哈希槽和memcached的带虚拟节点的一致性哈希算法是不是类似的呀,都是表现为一个节点管理一部分hash值范围数据,文章中怎么感觉区别很大?2019-11-2751
- 绿箭侠学了一个新词,身手钥钱!😄2020-10-30
- cpzhao缓存是提高性能比较有效的方法之一,适合读多写少的场景。 其实也想听听老师对于缓存和db之间的数据一致性方案。如果有其他同学有相关链接和看法,可以附上2020-02-27
- 小孩redis.是通过集群部署实现高可用的还是主备?2019-12-122
- 振超对于 Redis 集群的异地多活这块,想请问老师有没有好的解决思路,之前项目第一版是基于 LWW 解决复制冲突,目前计划引入 CRDT 去解决复制冲突2019-12-01
收起评论