memcached本身是集中式的缓存系统,要搞多节点分布,只能通过客户端实现。
memcached的分布算法一般有两种选择:
1、hash模余算法:
根据hash(key)的结果,模连接数的余数决定存储到哪个节点(键的整数哈希值,根据服务器个数取余来选定服务器节点),也就是hash(key)% sessions.size(),这个余数计算的方法简单,数据的分散性也相当优秀。
但也有其缺点。那就是当添加或移除服务器时,缓存重组的代价相当巨大。添加/删除服务器后(特别是某台服务器down机之后),余数就会产生巨变,这样就无法保证获取时计算的服务器节点与保存时相同,从而影响缓存的命中率——造成原有的缓存数据将大规模失效。
2、Consistent Hashing,一致性哈希算法:
首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。
从上图的状态中添加一台memcached服务器。余数分布式算法由于保存键的服务器会发生巨大变化而影响缓存的命中率,但Consistent Hashing中,只有在continuum上增加服务器的地点逆时针方向的第一台服务器上的键会受到影响。
本文以上内容选摘自 memcached全面剖析–4. memcached的分布式算法
目前支持 "一致性哈希算法" 的 java版memcached客户端: spymemcached、xmemcached。
- 大小: 38.7 KB
- 大小: 45.1 KB
分享到:
相关推荐
Ketama算法是一致性hash算法的一个优秀实现。增删节点后数据命中率及均分率都很高。
memcached全面剖析,讲述了memcached的原理,架构以及简单的案列分析
Memcached的java客户端已经存在三种了:官方提供的基于传统阻塞io由Greg Whalin维护的客户端;Dustin Sallings实现的基于java nio的Spymemcached;XMemcached
memcached全面剖析–4. memcached的分布式算法.txt
memcached全面剖析–2. 理解memcached的内存存储 memcached全面剖析–3. memcached的删除机制和发展方向 memcached全面剖析–4. memcached的分布式算法 memcached全面剖析–5. memcached的应用和兼容程序 可关注...
用于一致性哈希的算法与libketama相同。 例如,有多种处理错误的方法,例如,当服务器不可用时,您可以配置客户端,使其在高速缓存未命中时看到对该服务器的所有请求,直到它再次上升为止。 还可以从一致的哈希算法...
目前为止我找到的关于memcached(分布式缓存)最详细的中文资料。
memcached C++ 客户端 源码
MemCached 全面剖析,中文,char lee 译。学习和研究MemCached的非常好的资料
Memcached 服务端,客户端,C#
Memcached服务端安装及其客户端简单使用[参考].pdf
memcached客户端,memcached客户端,memcached客户端
3.xmemcached,XMemcached也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性 能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的...
Memcached 客户端 服务端 管理工具
这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,
TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理、维护。 功能包括:NoSQL数据库的展示,库表的展示,key,value的展示,新增,修改,删除等数据的...
Memcached——内存数据库讲义及安装步骤