<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分布式一致性哈希算法的更多相关文章

  1. memcached 一致性哈希算法

    本文转载自:http://blog.csdn.net/kongqz/article/details/6695417 一.概述 1.我们的memcache客户端使用了一致性hash算法ketama进行数 ...

  2. 分布式_理论_08_Consistent Hash(一致性哈希算法)

    一.前言 五.参考资料 1.分布式理论(八)—— Consistent Hash(一致性哈希算法)

  3. Go -- 一致性哈希算法

    一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用 ...

  4. 一致性哈希算法与Java实现

    原文:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...

  5. 五分钟理解一致性哈希算法(consistent hashing)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法 ...

  6. 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...

  7. 一致性哈希算法以及其PHP实现

    在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:  轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Respons ...

  8. Java_一致性哈希算法与Java实现

    摘自:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...

  9. 一致性哈希算法(consistent hashing)【转】

    一致性哈希算法 来自:http://blog.csdn.net/cywosp/article/details/23397179       一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希 ...

随机推荐

  1. Delphi 快速获取文件大小(使用_lopen和FileSeek,此函数可以快速获取文件大小,即使文件已经被其它程序锁定)

    function GetFileSize(const fName: AnsiString): Int64; var hFile: THandle; begin hFile := _lopen(PAns ...

  2. WPF中的3D Wireframe

    原文:WPF中的3D Wireframe WPF不支持画三维线,但开发人员提供了ScreenSpaceLines3D 类用于实现这个功能.我已经在程序中实现并成功显示3D Wireframe,并能够进 ...

  3. 学习vi和vim编辑(4):高速移动定位

    平时.第一步是编辑文本需要做将光标移动到需要编辑.因此,根据需要,将光标移动到目标数字键来编辑文本的速度在一定程度上. 一篇文章.主要介绍怎样高速移动光标. 依据屏幕来移动: 在一个有几千行文本的文件 ...

  4. #747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation)

    原文:#747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation) 原文地址:https://wpf.2000th ...

  5. 算法(algorithm)、模型(model)与框架(framework)

    模型对应的数学公式,公式中往往有待学习得到的参数,因此在进行训练或者学习时,首先初始化这部分参数(0 或标准正太分布): 学习之前的初始化:initial model: 学习完成之后的模型:final ...

  6. 正确 zip 压缩和解压码

    网上流传zip压缩和解压缩 该代码有一个非常大的问题 尽管使用了ant压缩和解压缩.但任务流或使用java.util.zip 的方式来写,我在压缩的文件夹结构中所使用的过程遇到是不正确,即使是不同的文 ...

  7. WPF 4 DataGrid 控件(进阶篇二)

    原文:WPF 4 DataGrid 控件(进阶篇二)      上一篇<WPF 4 DataGrid 控件(进阶篇一)>中我们通过DataGridTemplateColumn 类自定义编辑 ...

  8. Code First 连接已有数据库

    连接数据库                 生成结果并没有一个可视化界面(Model First有)     其他 连接数据库之后,可以采用migration管理第一次add-migration XX ...

  9. WPF 播放音频使用的SoundPlayer和MediaPlayer

    WPF中,最简单最容易播放音频的方式是使用SoundPlayer类.它是.NET Framework 2.0的一部分,是对Win32 PlaySound API的封装. 它具有以下限制: 1)仅支持. ...

  10. Win10《芒果TV》更新v3.8.50勇敢版:新增短信和扫码登录

    勇敢,是心中最初的信仰,实景科幻实验节目<勇敢的世界>,重装上阵对抗升级,<中餐厅2>皇阿玛圣驾亲临,坐镇中国味道.Win10版<芒果TV>全平台同步更新勇敢版v3 ...