Memcached集群
来源:互联网 发布:淘宝网落地晒衣架 编辑:程序博客网 时间:2024/05/22 01:45
为了提供更好的性能,生产上不论是数据库还是应用服务器都会是多个。配置了Memcached的服务器称为Memcached服务器因此也可能是多个:形成集群。
有趣的是,集群内的Memcached服务器之间是互不通信的,每个Memcached服务器并不知道其他Memcached服务器的存在,是客户端将他们在逻辑上组成了一个集群,因此向集群中新增加一台Memcached服务器也仅需要在客户端程序上(如php脚本)添加(配置)新增服务器的信息即可。
集群服务器在客户端被维护成一个列表,客户端轮询访问,如果查找某个key不在第一个服务器,就向第二个服务器发起请求,如果有则返回,如果没有则向第三个发起….直到列表中的最后一个服务器。若在集群中所有服务器上均没搜索到相关信息,则再查找数据获取相关信息,这样就大大降低了数据库的负载。
上述访问机制使得Memcached服务器间的共享了内存,集群内的机器的内存相当于拼接到了一起,数据库中常被访问的热点信息(被高频查询的信息)就可以均匀的分布到集群内的服务器上。
做个实验,集群中有三台服务器,分别执行三个逻辑:
- 服务器1:如果key=weather的数据存在则展示,不存在则查询数据库后(代码中省略数据库操作)存入Memcached
- 服务器2:如果key=fruit的数据存在则展示,不存在则查询数据库后(代码中省略数据库操作)存入Memcached
- 服务器2:如果key=animal的数据存在则展示,不存在则查询数据库后(代码中省略数据库操作)存入Memcached
三个服务器脚本均接受GET参数作为key值查询,如果没有GET参数,则分别以上面定义的weather、fruit、animal查询。
服务器上的脚本仅仅是默认的key和value不同,分别为weather/Sunny、fruit/Banana、animal/Monkey,下面仅给出服务器1上的脚本。
<?php$memcached = new Memcached;$hosts = array( array('192.168.109.129',11211), array('192.168.109.131',11211), array('192.168.109.133',11211));$memcached->addServers($hosts);$defaultKey = 'weather';if(isset($_GET['key'])){ $key = $_GET['key'];}else{ $key = $defaultKey;}if(($value = $memcached->get($key))!=FALSE){ echo "Value of $key is ".$value.', Now is: '.date('Y-m-d H:m:s');}else{ echo 'No value with key "'.$key.'" is found by Memcached!<br/>'; if(!isset($_GET['key'])||$_GET['key']==$defaultKey) { echo 'Write it to Memcached!<br/>'; $value = 'Sunny'; $result = $memcached->set($key,$value,120); if($result == TRUE) { echo 'Value with key "'.$key.'" is Stored!<br/>'; echo 'Now is: '.date('Y-m-d H:m:s'); } else { echo 'Failed to store with error code:'.$memcached->getResultCode().'!'; } }}?>
初始时,由于Memcached没有被任何脚本放入key是weather、fruit和animal的数据,因此都是找不到的。当服务器1和2上的脚本均被执行后,集群的内存中就加入weather和fruit,在1或2上均可以访问到weather和fruit的值,但是访问不到animal的值。当服务器3的脚本被执行后,annimal的值就可以被三台服务器中的任意一台访问到了。
服务器1上找不到key是weather的数据:
服务器2上找不到key是fruit的数据:
服务器1上可以找到key是fruit的数据,这个数据实际是在服务器2上的:
服务器2上可以找到key是fruit的数据:
服务器1上找不到key是animal的数据:
服务器2上也找不到key是animal的数据:
服务器3上也找不到key是animal的数据,但马上写入:
服务器1上可以找到key是animal的数据:
服务器2上可以找到key是animal的数据:
- memcached集群
- Memcached集群
- Memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- memcached+magent实现memcached集群
- magent做memcached集群
- Memcached集群代理
- memcached集群负载均衡
- php memcached缓存集群
- 华硕x450vb黑苹果系统拯救与安装
- hdu 1030 Delta-wave
- Django知识点
- 拓扑排序
- Material Design系列,Behavior之BottomSheetBehavior与BottomSheetDialog
- Memcached集群
- PropertyChangeListener
- linux
- 一些hadoop脚本事例--64
- leetcode-258. Add Digits
- POJ 1007 DNA Sorting
- OpenCV入门——Win10 + Visual Studio 2013+OpenCV 3.0 环境搭建
- javascript面向对象学习笔记(五)——模块化
- 关于PN结