分布式数据之缓存技术,今天就一起来揭开其神秘面纱

不知不觉,分布式数据存储这一站已经到了最后一讲 。在前面几讲,我与你分享了 CAP 理论(想要设计一个好的分布式系统,你必须得搞定这个理论)、(分布式存储系统三要素,掌握这些就离成功不远了)、数据分布式分片方法和数据复制技术(分布式数据复制技术,今天就教你真正分身术),其中数据分片方法和数据复制技术均是导购中的关键技术 。
在这一讲,我将为你讲解分布式存储中“货架”的关键技术——缓存技术 。
在计算机领域的各个方面,缓存都非常重要,是提升访问性能的一个重要技术 。为什么这么说呢?
从单个计算机的体系结构来看,内存和处理器速度差异很大,如果不采用缓存技术,处理器的性能会受到很大的限制 。
【分布式数据之缓存技术,今天就一起来揭开其神秘面纱】再看计算机应用,如果不采用缓存技术,对于每个请求,应用都要与后台数据库做一次交互,而数据库中的数据存储在磁盘上,因此每次请求都要和磁盘做交互,而磁盘访问的性能很低,造成访问延迟 。
除此之外,还有网络访问,如果没有缓存机制,每次访问主机都要与远程机器做交互,速度又可想而知 。
接下来,我们就一起打卡分布式缓存技术吧 。
 
什么是分布式缓存?打比方来说,缓存技术其实就像一个水缸,平时它会存储一定的水,而这些水就来自深井 。如果每次都去深井打水,一方面井口比较小,导致一次能接收的用水请求有限;另一方面,井比较深,打水的工序比较复杂,导致所需时间比较长 。
而有了这个水缸,我们就不需要去深井里打水,当水缸里没水时,水泵会将深井里的水抽到水缸中暂时存储起来 。也就是说,“缓存技术”存储了满足人们一定时间内常用的“水量”,以提高用水效率 。
在计算机领域,缓存技术一般是指,用一个更快的存储设备存储一些经常用到的数据,供用户快速访问 。用户不需要每次都与慢设备去做交互,因此可以提高访问效率 。
分布式缓存就是指在分布式环境或系统下,把一些热门数据存储到离用户近、离应用近的位置,并尽量存储到更快的设备,以减少远程数据传输的延迟,让用户和应用可以很快访问到想要的数据 。这,是不是可以形象地理解为“身手钥钱”随身带呢?
其实,我们通常说的分布式数据缓存,属于计算机应用中的缓存的一种 。而计算机应用中的缓存,一般指内存,即内存存储了用户经常访问的数据,用户或应用不再需要到磁盘中去获取相应的数据,大幅提高访问速度 。
如下图所示,数据 A 是应用经常访问的数据,而数据 B 很少被应用访问,因此当应用访问数据 A 时,不需要到磁盘,而直接访问内存即可得到对应的值,速度较快;相反,访问数据 B 时,由于内存中没有缓存数据 B,所以应用需要到磁盘中获取对应的值,速度较慢 。

分布式数据之缓存技术,今天就一起来揭开其神秘面纱

文章插图
 
那么今天,我要与你分享的分布式数据存储相关的缓存技术,就是以内存做为磁盘的缓存 。
 
分布式缓存原理redis 分布缓存原理Redis 的全称是 Remote Dictionary Server(远程字典服务器) 。可以直观地看出,它是以字典结构将数据存储在内存中,应用可直接到内存读写 Redis 存储的数据 。
Redis 集群是一个典型的去中心化结构,每个节点都负责一部分数据的存储,同时,每个节点还会进行主备设计来提高 Redis 的可靠性,具体原理你可以再回顾下前面文章中的相关内容 。
接下来,我与你分享下,Redis 中与缓存关系最紧密的三个特性:支持多数据结构、支持持久化和主备同步 。
 
第一,Redis 支持多数据结构 。
Redis 是一个基于内存的 key-value 数据库,为了方便支持多应用的缓存,比如缓存文本类型、数据库的查询结果(字段与字段对应的值)等等,支持的数据结构不仅有简单的 k/v 类型,还可以支持 List、Set、Hash 等复杂类型的存储 。
以 Hash 这种复杂类型的存储为例,Redis 将 Hash 视作一个整体当作数据库的 value(可以是一个对象,比如结构体对象)进行存储 。如果把 Hash 结构的整体看作对象的话,Hash 结构里的 key-value 相当于该对象的属性名和属性值 。
比如,插入 Hash 数据类型的命令:HMSET test field1 “Hello” field2 “World”中,如下图所示,test 为 key 值, field1 “Hello” field2 “World” 为 value 值,如果把整个 Hash 结构看做对象的话,则 field1、field2 类似于对象中的属性名,“Hello”“World”类似于对象中的属性值 。


推荐阅读