memcached分布式一致性哈希算法
<span style="font-family: FangSong_GB2312; background-color: rgb(255, 255, 255);">如果想在多台服务器上使用memcached缓存,首先是要保证到每台服务器上缓存的数据比较均匀,这样会充分利用服务器的资源。速度也是很快。</span>
1、memcached缓存支持多实例,但是具体将缓存放置在具体的哪一台服务器上面这个算法是需要我们自己来完成的。前面的文章中有提到使用取余数来计算,但是如果其中有服务器出现问题,那样缓存就被打乱了。
2、使用一致性哈希算法来实现
思想:
1)、将服务器的名字和键值都统一化成比较大的整数,如php使用crc32()这个函数。
2)、然后就是将一台服务器虚拟成多台服务器,这样数据分散的就是比较均匀,
3)、在这些数据上面,以一个圆的形式。从圆的一点开始查找,查到比圆上面小的一点就将该键的缓存放置到找到的服务器上面。这样服务器越多,其中一台或多台服务器出现了问题,都能很好的使用缓存,这样命中率下降的不大。
<?php /**
* 随机生成一个数接口
*/
interface Hash {
Public function _hash($str);
} /**
* 查找出键的位置
*/
interface Distribution {
Public function lookup ($key);
} /**
* 分布式类
*/
Class Contain implements Hash,Distribution {
Protected $_node = array();
Protected $_mul = 64;
Public function _hash($str) {
return sprintf('%u', crc32($str));
} Public function lookup($key) {
$point = $this->_hash($key);
$node = current($this->_node);
foreach ($this->_node as $k => $v) {
if ($point <= $k) {
$node = $v;
break;
}
}
return $node;
} /**
* 添加服务器节点
*/
Public function addNode($node) { for ($i=0; $i < $this->_mul ; $i++) {
$this->_node[$this->_hash($node . '-' . $i)] = $node;
} //$point = $this->_hash($node);
//$this->_node[$point] = $node;
$this->sortNode();
} Public function sortNode() {
ksort($this->_node, SORT_REGULAR); } /**
* 测试的函数
*/
Public function printSort() {
echo '<pre>';
print_r($this->_node);
}
}
memcached分布式一致性哈希算法的更多相关文章
- memcached 一致性哈希算法
本文转载自:http://blog.csdn.net/kongqz/article/details/6695417 一.概述 1.我们的memcache客户端使用了一致性hash算法ketama进行数 ...
- 分布式_理论_08_Consistent Hash(一致性哈希算法)
一.前言 五.参考资料 1.分布式理论(八)—— Consistent Hash(一致性哈希算法)
- Go -- 一致性哈希算法
一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用 ...
- 一致性哈希算法与Java实现
原文:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...
- 五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法 ...
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- 一致性哈希算法以及其PHP实现
在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Respons ...
- Java_一致性哈希算法与Java实现
摘自:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...
- 一致性哈希算法(consistent hashing)【转】
一致性哈希算法 来自:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希 ...
随机推荐
- 字符串匹配:从机器到后缀自己主动KMP
后缀自己主动机(sam)对字符串匹配 ==== 我们已经配置了一个相对较短的模式字符串sam. 为P="abcabcacab", T[1..i]后缀.因此,它是sam最长前缀长度: ...
- Java利用Zxing生成二维码
Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing ...
- pip 9.0 离线安装Python3的环境库
到客户现场实施,很多情况下是没有网络的,我们需要在办公室准备好离线安装包. 假设现有已联网的客户机A,一台无网络的客户机B 客户机A 1.生成本地环境的包清单 pip3 freeze > req ...
- 【C/S通信交互之Http篇】Cocos2dx(Client)使用Curl与Jetty(Server)实现手机网游Http通信框架(内含解决curl.h头文件找不到问题)
之前已经分享过一篇基于Cocos2dx与服务器使用Socket进行通信的框架,还不太熟悉的请移步到如下博文中: [C/S通信交互之Socket篇]Cocos2dx(Client)使用BSD Socke ...
- C# HttpWebResponse下载限速
在使用HttpWebResponse请求网络内容的时候,一般如下面这种方法: code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 非生产环境代码,请在实际使用时进行 ...
- php 二维数组相同值 相加
array(3) { [0]=> array(2) { ["sourcesid"]=> int(1) ["addusernum"]=> str ...
- android中优雅实现recyclerview
在慕课网上看了Abner_泥阿布老师不一样的RecyclerView优雅实现复杂列表布局这个视频课程,本人在Ubuntu16.04LTS下使用android studio2.2.3按照老师讲解写的代码 ...
- 提示要求用户名和密码-localhost
同时安装了tomcat和oracle9i后,调试jsp出现--连接到localhost 提示:位于 XDB 的服务器 localhost 要求用户名和密码,原因是端口冲突,调整如下. 机器上装了ora ...
- Unity 3d新手上路
作为一位unity新手,初学遇到了不少坑,而且不知道怎么找,发觉网上关于unity的文档好少,还是我暂时没找到. 现在说说void OnTriggerEnter(Collider e),这个函数是我加 ...
- tortoisegit密码找回之抓包法
因为一直用tortoisegit记住密码(此方法只适用于tortoisegit有记住密码),昨天需要登陆gitlab发现密码忘记了,用了N个常用默认密码都不对:和度娘交流一会儿也无果,gitlab里的 ...