memcached分布式缓存

我们使用PHP连接多台memcached服务器,做分布式缓存,实现如下:

$memcache = new Memcache;
$memcache->addServer('192.168.252.134', 11211);
$memcache->addServer('192.168.252.134', 11212);
$memcache->addServer('192.168.252.134', 11213);
for ($i = 0; $i < 1000; $i++)
{
$memcache->set($i, $i, 0, 1000);
}

这样的实现是最直接、简单的,PHP应用直接连接memcached服务器。但也存在一个问题,就是可用性的问题,如果,有一台memcached 服务器宕机了,那么该服务器上的数据就丢失了,可能有人会认为,memcached本来就是做缓存的,缓存丢失就丢了呗,没什么大惊小怪的。其实不然滴, 缓存的命中率也是影响系统稳定性和高可用的一个指标嘛,难道每次丢了缓存,我们就那么心宽的“去数据库找数据就好咯”,这样缓存还有意义吗。

magent——memcached缓存代理服务器

针对上面的问题,可以使用magent缓存代理服务器来管理memcached服务器,PHP应用由直接和多台memcached交互转变成和magent交互。那么,magent都帮我们做了什么呢?

我们先上个图看看

可以看出,magent作为memcached集群的代理,还可以做备份(192.168.252.134:11213为备份服务器),主缓存服务 器(192.168.252.134:11211、192.168.252.134:11212)宕机后,应用依旧可以用从备份服务器上读取到缓存。

搭建magent缓存代理服务器

magent依赖libevent库

magent依赖libevent库

magent依赖libevent库

重要的话说三遍!!

1)编译安装magent

cd /home
mkdir ./magent
cd ./magent
wget -c https://memagent.googlecode.com/files/magent-0.5.tar.gz // 谷歌被墙了,如有需要可以评论留邮箱
tar xzvf ./magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp ./magent /usr/bin/magent

编译过程会遇到很多问题,参照这网址自行解决

2)memcached的搭建略过

3)启动memcached和magent

magent -u root -l 192.168.252.134 -p 11210 -s 192.168.252.134:11211 -s 192.168.252.134:11212 -b 192.168.252.134:11213

4)运行测试脚本

<?php
$host = '192.168.252.134';
$port = '11210';
$mem = memcache_connect($host, $port); $key1 = 'mctest1';
$value1 = '1';
$mem->add($key1, $value1); $key2 = 'mctest2';
$value2 = '2';
$mem->add($key2, $value2); $key3 = 'mctest3';
$value3 = '3';
$mem->add($key3, $value3); $key4 = 'mctest4';
$value4 = '4';
$mem->add($key4, $value4); $key5 = 'mctest5';
$value5 = '5';
$mem->add($key5, $value5); $key6 = 'mctest6';
$value6 = '6';
$mem->add($key6, $value6);

服务器192.168.252.134:11211

服务器192.168.252.134:11212

服务器192.168.252.134:11213

主服务器上的数据都会备份到备份服务器上,如果主服务器宕机了,应用依旧可以从备份服务器上取数据。

更多的部署图

本文链接:http://www.hcoding.com/?p=316

原创文章,转载请注明:JC&hcoding.com

magent——memcached缓存代理服务器的更多相关文章

  1. Linux下使用Magent+Memcached缓存服务器集群部署

    1.编译安装libevent  cd /root/soft_hhf/  wget http://cloud.github.com/downloads/libevent/libevent/libeven ...

  2. Memcached【Magent+Memcached】集群

    Memcached介绍  事件处理libevent是个程序库,它将Linux的epoll.BSD类操作系统的kqueue等事件处理功能封装成统一的接口.即使对服务器的连接数增加,也能发挥O(1)的性能 ...

  3. Twemproxy 缓存代理服务器

    Twemproxy 缓存代理服务器 Twemproxy 概述 Twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数.T ...

  4. Twemproxy 分布式集群缓存代理服务器

    Twemproxy 分布式集群缓存代理服务器 是一个使用C语言编写.以代理的方式实现的.轻量级的Redis代理服务器, 它通过引入一个代理层,将应用程序后端的多台Redis实例进行统一管理, 使 应用 ...

  5. Python项目使用memcached缓存

    前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...

  6. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  7. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  8. redis和memcached缓存

    memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...

  9. 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)

    当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...

随机推荐

  1. 用法总结:NSArray,NSSet,NSDictionary-备用

    Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组)NSSet 用于对象无序集合      (集合)NS ...

  2. quartz2.2.1-测试02-通过servlet动态修改定时任务运行时间

    /* * To change this license header, choose License Headers in Project Properties. * To change this t ...

  3. Moxon(摩克森)天线介绍

    一.Moxon(摩克森)天线介绍Moxon天线是一种方形天线,性质上类似二单元Yagi(八木),增益高,具有很强的方向性,按尺寸做好后几乎不用调试,阻抗50欧姆.在U段,天线尺寸小,便于携带,是一款非 ...

  4. tesseract-ocr图片识别开源工具

    tesseract-ocr图片识别开源工具 今天看同事的ppt,提到了图片识别,又tesseract-ocr,觉得不错,试一下,如果效果好可以用来做验证码的识别 http://code.google. ...

  5. iOS 9之WatchKit for WatchOS 2

    金田(github示例源码) 自AppleWatch发行的同时就可以为AppWatch开发相应的应用程序,不过最初的版本,能开发的功能极为有限,所以也只是有少数的App厂商为Apple定制了App,所 ...

  6. java中实现查看今天是星期几的代码实现

    public void getDate() { String[] weekDays = {"星期日", "星期一", "星期二", &quo ...

  7. 在什么情况下使用struct,struct与class的区别

    Struct定义和使用 类是引用类型,是保存在托管堆中的.通过定义类,我们可以在数据的生存期上得到很高的灵活性,但是也会让程序的性能有一定的损失.虽然这种损失很小,但当我们只需要定义一个很小的结构时, ...

  8. HDU_2033——时间加法

    Problem Description HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱.这个题 ...

  9. codeforces284 div1 B:概率dp

    蛋疼的期末..好久没有A题了,,惭愧啊 昨晚打起精神准备做cf 结果竟然忘记注册了..拿学长号看了看题,今早起来补了一道dp 题目大意: 有n首歌,你需要边听边猜 对于第 i 首歌 每听一分钟你猜出它 ...

  10. 关于ThinkPHP控制器的方法失效的问题

    今天发现控制器的方法失效了,用了排除法,找了长时间的原因,都没有找出来,后来干脆把home模块中的控制器和视图文件都复制到bbs模块下,竟然也不行. 这说明了控制器和视图没有问题,一定是模块的配置有问 ...