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年由麻省理工学院提出的一种分布式哈希 ...
随机推荐
- Leetcode 104 Maximum Depth of Binary Tree 二叉树
计算二叉树的最大深度 我的方法是找出两个子树的长度中最长的那个,然后加1 class Solution { public: int maxDepth(TreeNode* root) { ; ,maxD ...
- 简明Python3教程(A Byte of Python 3)
关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程 简明 ...
- WPF中的可视化对象(Visual)
原文:WPF中的可视化对象(Visual) 这是MSDN对Visual的解释:Visual class:Provides rendering support in WPF, which include ...
- VC实现程序重启的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启.所谓重启就是杀死系统的当前进程,然后重新开一个新进 ...
- 解决ASP.NET中Redis 每小时6000次访问请求的问题
原文:解决ASP.NET中Redis 每小时6000次访问请求的问题 虽然ServiceStack v4是商业支持的产品,但我们也允许免费使用小型项目和评估目的.上面的NuGet包中包含可以使用许可证 ...
- DevOps技术路线图
来自roadmap.sh github地址 自己整理的百度脑图中文版
- angular form set dynamic control(form动态设置control)
实现效果 form表单控件的实时更新 效果如图 关键代码 validateForm: FormGroup; // 表单校验 constructor( private fb: FormBuilder ) ...
- jquery动态创建小广告
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- qt部分类释义
如果测试错误,输出包含源码的警告信息 Q_ASSERT Qtime最后一次star()或restar()到现在的毫秒数 QTime::elapsed QMetaObject::invokeMethod ...
- windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集)
原文:windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集) Log Parser Studio是一个强大的IIS图形分析工具,值得推荐. 1. 安装L ...