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. MySQL学习笔记(二):MySQL数据类型汇总及选择参考

    本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型.  ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...

  2. yii2 获取从前台传过来的post数据

    第一次使用yii写接口的时候,直接用了$_POST获取post数据,发现会报400错误,根本无法获取到post数据,用$_GET却能获取get数据. 纠结了很久,然后查资料,发现原来yii中默认的开启 ...

  3. 染色[SDOI2011]

    题目描述 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如"11 ...

  4. python 分支语句 循环语句

    分支语句 #if-else if a > b: print('aaa') else: print('bbb') #if-elif-else if a > b: print('a>b' ...

  5. 让你能看懂的 JavaScript 闭包

    让你能看懂的 JavaScript 闭包 没有废话,直入主题,先看一段代码: var counter = (function() { var x = 1; return function() { re ...

  6. <Mastering KVM Virtualization>:第二章 KVM内部原理

    在本章中,我们将讨论libvirt.QEMU和KVM的重要数据结构和内部实现.然后,我们将深入了解KVM下vCPU的执行流程. 在这一章,我们将讨论: libvirt.QEMU和KVM的内部运作方式. ...

  7. Jenkins+ANT+Jmeter 接口测试的实践(转载)

    转载地址:https://testerhome.com/topics/5262 1.前言 最近感觉大家都在讲Jenkins+jmeter+ant或maven的使用,但没有说到具体怎么投入到项目使用,只 ...

  8. iOS获取用户设备崩溃日志并分析

    项目最近发布,部分用户在内侧使用,正好遇到一些问题,由于用户在其他城市,所以对于用户设备产生的崩溃日志,不好直接拿设备连接电脑. 对于这种情况,我们可以这样: 1.引导用户开启iOS设备设置-> ...

  9. 微信小程序简单入门1

    参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 1  创建项目 开发者工具安装完成后,打开并使用微信扫码登录.选择创建"项 ...

  10. .NET定位CPU使用率过高问题

    摘要: 当一个.net应用在生产环境CPU突然居高不下,如何快速准确的定位问题所在,并且对实时业务影响最小化?如何不抓Dump也不用live debug就可以知道你的应用在做什么?如何确认你的应用是由 ...