memcached是一个不错的分布式内存缓存系统,并且提供丰富的客户端api,有perl,php,java的等等等等。。。
要编译安装memcached,你的系统得先安装libevent,libevent的下载地址是:http://monkey.org/~provos/libevent/
我下载的版本是:
libevent-1.4.9-stable.tar.gz
memcached-1.2.6.tar.gz
先来编译libevent,
1 | ./ configure --prefix =/ usr/ local/ libevent && make && make install |
好了,现在来搞memcached
1 2 3 4 | ./ configure --prefix =/ usr/ local/ memcached-1.2.6 --with-libevent =/ usr/ local/ libevent make && make install ln -s / usr/ local/ memcached-1.2.6 / usr/ local/ memcached ln -s / usr/ local/ libevent/ lib/ libevent-1.4 .so.2 / usr/ lib |
下面来安装php对于memcached的扩展
从这里下载: pecl.php.net/package/memcache
我下载的版本是:3.0.4 beta版本,如果是用在生产上,还是建议下载稳定版本。
解压缩后进入目录,执行如下命令:
1 2 3 4 | / usr/ local/ php/ bin/ phpize ./ configure --prefix =/ usr/ local/ memcached_phpclient3.0.4 --enable-memcache --with-php-config =/ usr/ local/ php/ bin/ php-config --with-zlib-dir =/ usr/ local/ zlib/ make make install |
安装完成后,会显示: Installing shared extensions: /usr/local/php-5.2.8//lib/php/extensions/no-debug-non-zts-20060613/
接下来修改php.ini
首先找到extension_dir,默认的应该是:extension_dir = “./”
现在修改成:extension_dir = “/usr/local/php-5.2.8//lib/php/extensions/no-debug-non-zts-20060613/”
然后再找到Dynamic Extensions,在下面加上:
extension=memcache.so
然后重启apache,编写一个phpinfo()的网页,你会看到如下内容,好了,这就是说memcached的php client咱们已经安装成功了。
memcache
memcache support enabled
Version 3.0.4
Revision $Revision: 1.83.2.36 $
至于怎么用,我会在后面来给出示例,要是您等不及也可以去google上搜索去,一搜哎呀妈呀一大堆啊,下面给出几个可以参考的网址:
code.google.com/p/memcached/wiki/Clients
cn2.php.net/manual/en/memcache.installation.php
好了,还没完呢,咱们接着来启动memcached的server端吧。
其实启动memcached和启动mysql的脚本有些大同小异的意思,都是加上什么端口儿啊,用户啊什么的一大堆的零七八碎儿的参数呗。。。
1 | / usr/ local/ memcached/ bin/ memcached -d -m 10 -u root -l 192.168.0.12 -p 12000 -c 256 -P / tmp/ memcached.pid |
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.12,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
2.如果要结束Memcache进程,执行:
1 | kill ` cat / tmp/ memcached.pid` |
也可以启动多个守护进程,不过端口不能重复。
现在再来telnet 192.168.0.12 12000 看看可以telnet上去了吧。。。嘿嘿。。。
成了,差不多就这么着了。。。
现在可以在应用中将一部分数据保存在内存中了,但是如果是服务器突然宕机了,或者是说服务不知怎么的就抽了疯似的终止了,那么保存在memcached中的数据还在么?
废tm话啊,肯定tmd不在了。。。
那怎么办?所以memcachedb出来了,这个是由新浪的研发团队贡献的开源项目,且听下回tmd分解。。。
—– memcachedb 的分割线 —–
memcachedb 的介绍可以看这里:http://memcachedb.org/
我下载的版本是:memcachedb-1.2.1-beta.tar.gz
memcachedb的安装需要libevent,Berkeley Db,memcachedb这三个dd,
libevent这个就不多说了,如果不知道怎么安装看这里有介绍libevent的安装
好了,现在从http://www.oracle.com/technology/software/products/berkeley-db/index.html 来下载,
我下载的版本是:db-4.7.25.tar.gz
解压缩并进行编译安装:
1 2 3 4 | cd db-4.7.25/ build_unix/ ../ dist/ configure make make install |
然后db就被安装到了:/usr/local/BerkeleyDB.4.7/
编辑 /etc/ld.so.conf 添加
/usr/local/BerkeleyDB.4.7/lib
然后执行:
1 | ldconfig |
好了,前菜ok了,现在开始安装memcachedb了。。。
还是先得解压缩。。。这不废话么。。。
1 2 3 | ./ configure --prefix =/ usr/ local/ memcachedb-1.2.1 --with-libevent =/ usr/ local/ libevent --enable-threads make && make install ln -s / usr/ local/ memcachedb-1.2.1 / usr/ local/ memcachedb |
好啦。。。接下来就该启动memcachedb啦。。。
主程序在:/usr/local/memcachedb/bin/memcachedb
第一种,读写合并模式,即不做辅拷贝,即读又写,不做冗余备份
1 2 | / usr/ local/ memcachedb/ bin/ memcachedb -p21211 -d -r -u root -H / server/ mdb_11211 -N -H 参数是制定DB数据文件存放的位置 |
第二种,读写分离/备份模式
#主服务器 192.168.0.1 读写监听 11211 ,同步通过31211的端口完成,不占用繁忙的主服务端口
1 | / usr/ local/ memcachedb/ bin/ memcachedb -p21211 -d -r -u root -H / data/ mdb_11211_m -N -R 127.0.0.1:31211 -M |
辅服务器 192.168.0.2 只读监听 21212,从192.168.0.1 的 31211端口同步数据,同时再开一个31212端口对外提供数据同步服务
1 | / usr/ local/ memcachedb/ bin/ memcachedb -p21212 -d -r -u root -H / data/ mdb_11211_from_16801_s -O 192.168.0.1:31211 -R 192.168.0.2:31212 -S |
好了。。。现在就OK了。。。至于测试程序,忽略了。。。
可以参考的链接:
blog.youkuaiyun.com/simonlsy/archive/2008/01/07/2027940.aspx