/**
* memcached 一致性hash,分布式算法
* Class MemcacheCluster
*/
class MemcacheCluster
{
protected $nodes = array(); //服务器节点
protected $position = array(); //虚拟节点
protected $virtualNum = 32; //每个节点有32个虚拟节点;具体数量也可以 16 ,8等 public function hash($str)
{
//将字符串转成32位符号整数
return sprintf("%u", crc32($str));
} //查找key 落到哪个节点上
public function findNode($key)
{
$point = $this->hash($key); //先取圆环上最小的一个节点
//$key 哈希后比最大的节点都大就放到第一个节点
$node = current($this->position);
//下面这个查找可以后期优化为二分查找法。
foreach ($this->position as $k => $v) {
if ($point <= $k) {
$node = $v;
break;
}
}
//复位数组指针
reset($this->position);
return $node;
} public function addNode($node)
{
if (isset($this->nodes[$node])) {
return;
}
for ($i = 0; $i < $this->virtualNum; $i++) {
$pos = $this->hash($node . '-' . $i);
$this->position[$pos] = $node;
//方便删除对应的虚拟节点
$this->nodes[$node][] = $pos;
}
$this->sortPos();
} public function delNode($node)
{
if (!isset($this->nodes[$node])) {
return;
}
//循环所有的虚节点,谁的值==指定的真实节点 ,就把他删掉
foreach ($this->nodes[$node] as $k) {
unset($this->position[$k]);
}
unset($this->nodes[$node]);
} protected function sortPos()
{
//将虚拟节点排序
//把每一项按常规顺序排列(Standard ASCII,不改变类型)
ksort($this->position, SORT_REGULAR);
}
}

最新文章

  1. Python之路第一课Day2--随堂笔记
  2. ocfs2: 搭建环境
  3. Apache下开启SSI配置使html支持include包含
  4. Shell 语法之函数
  5. livewriter写Blog 神秘失踪?
  6. 用CSS为表格添加边框
  7. Android四大组件小结
  8. IBOutlet &amp; IBAction
  9. 关于js小数计算的问题
  10. 如何在ASP.NET 项目中使用Silverlight页面
  11. IDL实现主成分变化(PCA)
  12. C#使用Redis集群缓存
  13. Uva 10550 Combination Lock
  14. k8s健康检查(七)--技术流ken
  15. nova file injection的原理和调试过程
  16. C语言之四舍五入
  17. Kong(V1.0.2)Network &amp; Firewall
  18. .net core DI 注册 Lazy&lt;&gt; 类型
  19. vmware中nat模式中使用静态ip后无法上网的问题
  20. .net工具基础

热门文章

  1. @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 这个开源的第三方类库。主要是以下两个jar包:jackson-core-asl-1.6.4.jar;jackson-mapper-asl-1.6.4.jar
  2. VM Workstation中如何实现Linux系统的通信
  3. HDU 4499 Cannon (暴力搜索)
  4. hdoj1106排序
  5. 解决华为手机不出现logcat日志的问题
  6. zTree初体验(一)——小试牛刀
  7. bzoj2243【SDOI2011】染色
  8. 測试赛D - The War(有控制范围的贪心)
  9. 对数据html文本 的处理
  10. research plan1111