1.通过memcached服务器下的不同端口来达到模拟多台服务器的效果

2.假设现在有三台memcached服务器,本地分别使用11211,11212,11213三个端口来模拟

①打开端口

②连接端口

③以同样的方式别打开三台,不要关闭cmd窗口,记得ctrl+】回显

3.上代码

 <?php
//一致性哈希算法
class Memcached1{
protected $server=['11211','11212','11213'];
protected $node=[];
protected $memcache;
//memcached服务器连接
public function __construct()
{ } protected function MemcachedConnect($port){
$this->memcache=new Memcache();
$a=$this->memcache->connect('localhost',$port);
}
//产生虚拟节点
public function GetServer(){
foreach ($this->server as $k=>$v){
for ($i=1;$i<=100;$i++){
$m=sprintf("%u", crc32($v.'_'.$i));
$this->node[$m]=$v;
}
}
ksort($this->node);
return $this->node;
}
//获取缓存存放节点
protected function GetPort($key){
$key=sprintf("%u",crc32($key));
$nodelist=array_keys($this->node);//返回一个包含数组所有键名的数组(从小到大)
foreach ($this->node as $k=>$v){
if ($key>max($nodelist)){
$port=$this->node[$nodelist[0]];
break;
}
if ($key<=$k){
$port=$v;
break;
}
}
return $port;
}
//生成缓存
public function SetMemcached($key,$value){
//生成虚拟节点
$this->GetServer();
//获得数据存放端口
$p=$this->GetPort($key);
//链接memcached服务器
$this->MemcachedConnect($p);
$this->memcache->set($key,$value);
echo "ok";
}
public function get($key){
//生成虚拟节点
$this->GetServer();
//获得数据存放端口
$p=$this->GetPort($key);
//链接memcached服务器
$this->MemcachedConnect($p);
return $this->memcache->get($key); }
}
$m=new Memcached1;
//$list=$m->GetServer();
echo "<pre>";
//print_r($m->node);
$m->SetMemcached('aaa','aaa');
//echo $m->get('aaa');

4.总结

  虚拟节t点的思想是基于一体哈希算法,相比较于传统的一体哈希算法,在服务器挂掉其中一台或者几台时,不会造成仅存的服务器因压力骤大而停机,也比传统的取余计算方式合理

在某台服务器停机时,会将压力合理的分摊到其他的服务器

分布式memcached-虚拟节点的更多相关文章

  1. Memcached 笔记与总结(7)增加虚拟节点

    仅仅把 Memcached 服务器集群地址通过一致性哈希转映射在圆环上,可能会出现数据不能均匀地分配给各台 Memcached 服务器. 解决方案是引入虚拟节点,就是把每个映射在圆环上的服务器地址(物 ...

  2. memcached学习——分布式算法(Consistant hash + 虚拟节点)(三)

    1.取余算法 优点:数据分布均匀缺点:当服务器动态的添加.删除节点或者某台server down掉,会导致命中率超大幅度下降,甚至导致服务不可用 2.Consistant Hash算法:一致性哈希算法 ...

  3. 沉淀,再出发——手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群

    手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群 一.准备,再出发 在项目启动之前,让我们看一下前面所做的工作.首先我们掌握了一些Linux的基本命令和重要的文件,其次我们学会 ...

  4. HDU 5521 Meeting(虚拟节点+最短路)

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  5. 一致性hash和虚拟节点

    consistent hashing 算法的原理 consistent hashing 是一种 hash 算法,简单的说,在移除 / 添加一个 cache 时,它能够尽可能小的改变已存在key 映射关 ...

  6. Hadoop 分布式环境slave节点重启忽然不好使了

    Hadoop 分布式环境slaves节点重启: 忽然无法启动DataNode和NodeManager处理: 在master节点: vim /etc/hosts: 修改slave 节点的IP (这个时候 ...

  7. hdu 2121无根最小树形图要建一个虚拟节点

    #include<stdio.h> #include<string.h> #define inf 999999999 #define N 1100 struct node { ...

  8. ACK容器服务虚拟节点使用阿里云日志服务来收集业务容器日志

    按照这篇博文的介绍,可以在ACK集群上通过Helm的方式部署虚拟节点,提升集群的弹性能力.现在,通过虚拟节点部署的ECI弹性容器实例也支持将stdout输出.日志文件同步到阿里云日志服务(SLS)进行 ...

  9. ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力

    在上一篇博文中(https://yq.aliyun.com/articles/647119),我们展示了如何手动执行yaml文件给Kubernetes集群添加虚拟节点,然而,手动执行的方式用户体验并不 ...

随机推荐

  1. iOS TextField输入限制(限制长度、只能输入数字,只能输入数字字母……)

    项目中各个地方都会用到TextField,textField的输入也会有各种需求,各种限制,每次用到的时候要重写一遍这些限制,导致各种垃圾代码,各种重复,有一天,我终于看不下去了,于是把textFie ...

  2. 流畅python学习笔记:第十五章:上下文管理器

    在开始本章之前,我们首先来谈谈try-excep..final模块.在Python中,进行异常保护的最多就是用try..except..final.首先来看下下面的代码.进行一个简单的除法运算.为了防 ...

  3. 【原创】01-1. 基于 checked 关于 attribute 和 property 的理解

    Attribute(属性) 和 Property(特性) Attribute(元素节点的属性),例如html中常用的class.title.align等(即:属性节点).而Property 是这个DO ...

  4. 最短路和次短路问题,dijkstra算法

    /*  *题目大意:  *在一个有向图中,求从s到t两个点之间的最短路和比最短路长1的次短路的条数之和;  *  *算法思想:  *用A*求第K短路,目测会超时,直接在dijkstra算法上求次短路; ...

  5. Jsp分页的简单制作

    Jsp分页的简单制作 运行环境:jsp+tomcat+eclipse 技术:servlet+jsp+mysql 分页技术还区分两个:假分页和真分页 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...

  6. [算法题] Reverse Linked List

    题目内容 题目来源:LeetCode Reverse a singly linked list. 题目思路 这个属于经典问题,链表反转的思路基本上已经非常固定了.有两种非常常见的方法:1.三指针法 2 ...

  7. 搭建ElasticSearch+MongoDB检索系统

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  8. IOS开发中多线程的使用

    一.创建多线程的五种方式 1.开启线程的方法一 NSThread * thread=[[NSThread alloc] initWithTarget:self selector:@selector(_ ...

  9. ubuntu修改grub,修改开机顺序,配置grub启动顺序

    方法一: 1.进入Ubuntu系统后打开终端 2.终端中输入以下命令 sudo gedit /boot/grub/grub.cfg 3.找到Windows的配置将其剪切到Ubuntu的前面 把下面 # ...

  10. JavaJavaScript小问题系列之JSON解析

    1.错误消息及截图 这个很搞笑也很纠结,今天一开发妹子,发现一个问题: 服务端返回字符串"{\"phone\":\"15000000000\"}&qu ...