首先,我要先带你了解一下 Memcached 的集群结构 。
redis 的集群结构是每个节点负责一部分哈希槽,且每个节点可以设计主备 。与 Redis 不同,Memcached 集群采用一致性哈希的思路,使用的是 Ketama 算法 。该算法的主要思想就是,带虚拟节点的一致性哈希算法 。
在实际应用中,每个物理节点对应 100~200 个虚拟节点,才能到达一个较好的存储均衡 。这里为了方便理解,我对 Memcached 的集群结构做了简化,如下图所示,物理节点 1 对应两个虚拟节点 1-1、1-2,物理节点 2 对应三个虚拟节点 2-1、2-2 和 2-3 。
文章插图
采用带虚拟节点的一致性哈希方法,有一个优点是,当添加或移除节点时,不会出现大规模的数据迁移 。你可以再回顾下(数据分布方式之哈希与一致性哈希,我就是个神算子)
对于数据结构的支持,Memcached 仅支持简单的 k/v 数据类型,如果想要存储复杂的数据类型,比如 List、Set 和 Hash 等,需要客户端自己处理,将其转化为字符串然后进行存储 。这样就导致了一个缺点,操作不灵活 。比如,Memcached 存储的数组中有一个元素需要修改,则需要将整个数组的数据取出来,修改后再整体写入到数据库中。
而对于持久化,Memcached 是不支持的 。这意味着断电时,Memcached 中存储的数据将会全部丢失 。因为内存是一种易失性存储设备,断电后将不会存储数据 。
在 Memcached 中,服务器和服务器之间没有任何通信,即自身不支持主备 。如果想要实现高可用,需要通过第三方实现 。比如,Repcached 实现了 Memcached 的复制功能,支持一主一备,从而使 Memcached 满足高可用 。
对比分析上面,我以 Redis 和 Memcached 这两个主流的分布式缓存系统为例,带你学习了分布式缓存技术 。接下来,我以一个表格对它们进行分析对比,以便于你理解和查阅 。
文章插图
总结今天,我主要与你分享了分布式数据的缓存技术 。
首先,我以水缸的例子带你直观了解了什么是缓存,并引出了什么是分布式数据缓存 。分布式数据缓存是以内存作为磁盘的缓存,存储一些用户经常需要用的数据,以提高访问速度 。
其次,我以主流的 Redis 和 Memcached 为例,与你介绍了分布式缓存技术中的关键技术,包括支持的数据存储结构(比如 k/v、Set、List 等)、持久化技术(包括快照方式等)和数据同步技术(具体技术原理,可参见分布式数据复制技术,今天就教你真正分身术)
最后,我再通过一张思维导图来归纳一下今天的核心知识点吧 。
文章插图
信通过本讲的学习,你已不再觉得分布式缓存有多么神秘了,不管是使用 Redis 还是看 Redis 等系统的源码,一定会更容易理解和上手 。加油,行动起来吧!
在公众号【架构师修炼】菜单中可自行获取专属架构视频资料,无套路分享,包括不限于 JAVA架构、Python系列、人工智能系列、架构系列,以及最新面试、小程序、大前端均无私奉献,你会感谢我的哈
推荐阅读
- 机器学习算法中如何执行回归数据的特征选择
- 冰岛古树茶的鉴别,2014年云章古树茶之冰岛
- 被称为宫词之祖的中唐诗人是 宫中词的作者是谁
- 曹丕之后谁继承了皇位 曹丕下一个继承人
- 祖冲之的两项最重要的成就是大明历和什么 祖冲之的大明历是什么
- 白茶为什么值得收藏,白茶存放的影响因素之含水量
- 如果刘备打赢了夷陵之战 刘备发动夷陵之战的深层原因
- 马陵之战的意义 马陵之战是哪个典故的由来
- 绿茶时间长了能喝吗,菊花茶变成绿色之后还能喝吗
- 白茶茶树之福安大白茶,福安大白茶传说是什么