memcached
虽然称为
“
分布式
”
缓存服务器,但服务器端并没有
“
分布式
”
功能。每个服务器都是完全独立和隔离的服务。
memcached
的分布式,则是完全由客户端程序库实现的。
这种分布式是
memcached
的最大特点。
这里多次使用了
“
分布式
”
这个词,但并未做详细解释。
现在开始简单地介绍一下其原理,各个客户端的实现基本相同。
下面假设
memcached
服务器有
node1
~
node3
三台,
应用程序要保存键名为
“tokyo”“kanagawa”“chiba”“saitama”“gunma”
的数据。

图
1
分布式简介:准备
首先向
memcached
中添加
“tokyo”
。将
“tokyo”
传给客户端程序库后,
客户端实现的算法就会根据
“
键
”
来决定保存数据的
memcached
服务器。
服务器选定后,即命令它保存
“tokyo”
及其值。

图
2
分布式简介:添加时
同样,
“kanagawa”“chiba”“saitama”“gunma”
都是先选择服务器再保存。
接下来获取保存的数据。获取时也要将要获取的键
“tokyo”
传递给函数库。
函数库通过与数据保存时相同的算法,根据
“
键
”
选择服务器。
使用的算法相同,就能选中与保存时相同的服务器,然后发送
get
命令。
只要数据没有因为某些原因被删除,就能获得保存的值。

图
3
分布式简介:获取时
这样,将不同的键保存到不同的服务器上,就实现了
memcached
的分布式。
memcached
服务器增多后,键就会分散,即使一台
memcached
服务器发生故障
无法连接,也不会影响其他的缓存,系统依然能继续运行。
缓存系统中应用比较多的是余数计算分散和一致性
HASH
计算分散。
余数计算分散法简单来说,就是
“
根据服务器台数的余数进行分散
”
。
1.
求得传入键的整数哈希值(
int hashCode
)。
2.
使用计算出的
hashCode
除以服务器台数
(N)
取余数(
C=hashCode % N
)
3.
在
N
台服务器中选择序号为
C
的服务器。
余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。
那就是当添加或移除服务器时,缓存重组的代价相当巨大。
添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,
从而影响缓存的命中率。
Consistent Hashing
算法
一致性
HASH
算法我的理解,简单来说就是
,
在一个大的数据范围内的构建一个虚拟的环,首(
0
)尾(
Integer.MAXVALUE
)相接的圆环,然后通过
某种
HASH
算法
增加虚拟节点的方式(
1
个实体节点可以虚拟
N
个虚拟阶段,如
160
,
200
,
1000
等)让节点更为均匀的分别在环上。
KEY
请求的时候,也通过相同的某种
HASH
算法
计算出
HASH
值,然后在在到环上定位同向最接近的虚拟节点,最后通过虚拟节点与实体节点的对应关系找到服务的实体节点。

网上介绍很多,图也多,不想在截取了。那就给个连接:
http://blog.csdn.net/sparkliang/article/details/5279393
另外公司现有的项目中也使用
Consistent Hashing
用于分表定位,缓存定位等。工程项目中也有先关算法的实现。
特点
1.
算法实现比较麻烦,需要构建虚拟环。
2.
解决了余数算法增加节点命中大幅额度降低的问题,理论上,插入一个实体节点,平均会影响到:虚拟节点数
/2
的节点数据的命中
参考:http://tech.idv2.com/2008/07/10/memcached-001/

- 大小: 18.5 KB

- 大小: 23 KB

- 大小: 26.2 KB

- 大小: 8.2 KB
分享到:
相关推荐
本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...
【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...
### Memcached学习笔记 #### 一、Memcached简介 Memcached是一种高性能的分布式内存对象缓存系统,主要用于在动态应用程序中减少数据库负载,提高访问速度。最初由Danga Interactive为优化LiveJournal.com网站的...
【Memcached 学习笔记】 Memcached 是一种高性能的分布式内存对象缓存系统,主要用于减少数据库负载,提高应用程序的响应速度。它最初由 Danga Interactive 开发,为 LiveJournal.com 提供服务,处理高流量的动态...
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...
标题 "memcached-笔记资料.rar" 暗示了这个压缩包包含的是关于 memcached 的学习资料,这是一款广泛使用的分布式内存对象缓存系统。它主要用于减轻数据库的负载,通过在内存中存储常用数据,提高应用程序的响应速度...
Memcached是一款分布式内存对象缓存系统,广泛应用于高性能网站和应用中。它设计的目标是简化并加速动态Web应用程序的数据存储,通过将数据存储在内存中,避免频繁读取或写入数据库,从而提高系统响应速度。 二、...
- **数据分片**:对于大量数据,可以使用哈希算法实现数据分片,分散到多个Memcached实例上。 5. **性能优化** - **内存管理**:根据服务器资源合理分配内存,避免内存不足导致的性能下降。 - **网络优化**:...
以上只是Java架构面试中可能涉及的部分核心知识点,实际的压缩包文件可能还包括更多具体的面试题目、解答以及深度学习笔记,对于准备Java架构师职位的求职者来说,这些都是宝贵的参考资料。通过系统学习并实践这些...
在这个学习笔记中,我们将探讨NoSQL技术的优劣,并对常用的NoSQL技术进行对比和深入分析,同时也会涉及到Memcached数据缓冲技术。 首先,让我们来了解为什么我们需要使用非关系数据库。随着互联网web2.0网站的兴起...
Memcached是一种高性能、分布式内存缓存系统,常用于减轻数据库的负载,提升Web应用的响应速度。 描述中提到的是关于Memcached的安装文件、集群配置的图解文档(可能是.doc格式),以及PHP程序实现Memcached项目的...
以上只是Java架构面试中部分可能涉及的知识点,具体的学习笔记和答案会更加详细地解释每个概念,提供实践案例和解决思路,帮助读者巩固理论知识并提升实战技能。对于希望在Java架构领域深造的开发者来说,这是一个...
Linux学习笔记的知识点总结,涵盖了Linux文件系统、Linux介绍、Linux文件权限、Shell简介、运维工具、Ansible的使用、Supervisor的使用、Confd的使用、NFS的使用、ceph-fuse的使用、Git、Nginx、Keepalived、TCP/IP...
它包含了四个主要部分:ConcurrentProgrammingStudyNotes(并发编程学习笔记)、DistributedTopic(分布式主题)、DistributedStudyNotes(分布式学习笔记)以及ConcurrentProgrammingTopic(并发编程主题)。...
本项目提供了详细的流程说明和学习笔记,帮助开发者更好地掌握相关知识。 首先,`pom.xml`文件是Maven项目的配置文件,它定义了项目依赖,包括SSM框架的各个版本和其他必要的库。通过管理依赖关系,Maven能够自动...
5. 分布式存储和高可用 - 大型网站在使用Memcache时,为了提高缓存的可用性和扩展性,往往会采用多个memcached服务器组成分布式存储。 - Memcache内置了简单的负载均衡机制,可以将数据存储在不同的服务器上,自动...
附件中的"笔记.docx"可能详细记录了分布式Session的各种实现方法和优缺点,"01_分布式会话是什么.png"可能是一张解释分布式会话概念的图表,而"PPT.pptx"则可能是更全面的讲解,包括具体的配置示例和实战经验分享。...
这份学习笔记涵盖了多个关键领域,包括亿级流量网站的架构设计、微服务架构、代码重构和设计模式等,这些都是现代软件开发的核心技术。 首先,亿级流量网站架构核心技术.pdf 提到了如何处理大规模用户访问的问题。...
本学习笔记基于"B站【编程不良人】"的Redis教程,深入浅出地介绍了Redis的各种特性和使用方法,旨在帮助读者全面掌握Redis的基础与进阶知识。 一、Redis基础知识 1. 数据类型:Redis提供了五种基本数据类型,包括...