因为业务需要,要对数据库查询记录进行缓存,当然除了mysql自身的缓存之外的东西了。
很早以前就研究过,那个memcached,但是一直没有机会实际操作一下。
这下,好了,有机会,亲密接触一下了。
呵呵
如果还不知道这个是做什么用的,先去搜索一下吧。
也可以到官网看看:http://www.danga.com/memcached/
在安装之前,需要几个软件包
libevent
http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
memcached
http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz
前两个是必须的,至于第三个,看你了,因为我的要用在PHP客户端访问,所以安装了这个
memcache
http://pecl.php.net/get/memcache-2.2.4.tgz
下面简要说明一下,安装过程吧。
首先安装libevent
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable
./configure --prefix=/usr
make && make install
然后再安装
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6
./configure --prefix=/usr/local
make && make install
安装完成之后,就可以直接运行测试一下
可以直接给出程序路径,也可以直接运行(当然你的系统已经加载路径的情况下)
/usr/local/bin/memcached -u wwwrun
我用的WEB系统的默认用户来运行的
不要关闭这个运行的窗口,另外开一个窗口,
执行如下命令:
telnet localhost 11211
注:其中11211是memcached运行的默认端口,当然你也可以用其它端口来运行
出现如下窗口
执行查看状态命令stats,看看当前状态如何。
我这个窗口是运行了一段时间的效果。
查看Memcached帮助信息,可以使用如下命令
/usr/local/bin/memcached -h
选项说明
-p <num> 监听的TCP端口 (缺省: 11211)
-d 以守护进程方式运行Memcached
-u <username> 运行Memcached的账户,非root用户
-m <num> 最大的内存使用, 单位是MB,缺省是 64 MB
-c <num> 软连接数量, 缺省是 1024
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息
-h 打印帮助信息
-i 打印memcached和libevent的版权信息
刚才那个运行,一旦窗口关闭,程序就关闭了,要想让它运行在后台,可以选择-d选项
来了一个通用运行参数吧
/usr/local/bin/memcached -p 11211 -d -u wwwrun -m 2048 -c 1024 -vvv
我的机器配置比较高是16G内存,所以叫内存不珍贵,用了2G,呵呵
下面再说一下,PHP调用的安装和配置吧
tar zxvf memcache-2.2.4.tgz
cd memcache-2.2.4
/usr/bin/phpize
./configure --with-php-config=/usr/bin/php-config
make && make install
注:这个地方,PHP的安装路径很重要,每个系统的PHP安装位置可能有点变化,不同的安装方式也会不一样
如果你确实不知道安装在哪儿了。
可以去查找一下。
也可以使用whereis php
之类的命令帮助你快速找到它的位置
安装完成之后,要让你的apache认到它,就需要修改php.ini对应的设置
又是不同的环境,配置不一样了。
我的是suse 10.2 系统默认安装位置在
/etc/php5/apache2/php.ini
另外,这个PHP配置跟一般还有点区别,就是,它的配置通常不是直接修改php.ini这个文件
我在/etc/php5/conf.d/目录中发现很多配置文件
就在这个目录下,随便复制了一个文件,将它重命名为memcache.ini
然后,修改了,里面内容为:extension=memcache.so
重新启动apache,
用php -m
发现已经生效了,有这个模块了。
现在可以来体验一下了。
<?php
//连接Memcache
$mem = new Memcache;
$mem->connect("localhost", 11211);
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br>";
//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";
//保存数组数据
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";
//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
//关闭连接
$mem->close();
?>
memcached支持分布式的体验
/usr/local/bin/memcached -p 11211 -d -u wwwrun -m 2048 -c 1024 -vvv
/usr/local/bin/memcached -p 11311 -d -u wwwrun -m 2048 -c 1024 -vvv
/usr/local/bin/memcached -p 11411 -d -u wwwrun -m 2048 -c 1024 -vvv
可以同时运行多个哟。
而且有特别算法,自动连接到服务端,客户端不需要特别操作。
<?php
//连接Memcache
$mem = new Memcache;
$mem->addServer("localhost", 11211);
$mem->addServer("localhost", 11311);
$mem->addServer("localhost", 11411);
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br>";
$mem->set('key2', 'This is first value', 0, 60);
$va2 = $mem->get('key2');
echo "Get key2 value: " . $va2 ."<br>";
//保存数组数据
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key3', $arr, 0, 60);
$va3 = $mem->get('key3');
echo "Get key3 value: ";
print_r($va3);
echo "<br>";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";
//关闭连接
$mem->close();
?>
注
实际上Key1保存在11211端口机器
Key2保存在11311端口机器上
Key3保存在11411端口机器上
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com