您的位置:首页 > 数据库 > Memcache

memcached学习笔记

2016-07-23 16:20 531 查看
<?php
//===========================================================================================================//
一、安装
.编译安装:需要先下载安装包,然后安装,需要工具Libevent
.依赖安装:使用系统自带的安装工具——yum(centos) | apt-get(ubuntu),安装的时候选择安装依赖包Libevent
.安装可以选择Memcached,而不是Memcache,因为它是Memcache的升级版本,运行速度更快

1.客户端安装:
1.1  服务端安装目录默认是:/usr/bin/memecached
1.2  # ps -ef | grep memcached :查看所有进程中进程名包含memcach的进程,ps命令用于监控进程,参数e表示监控全部等同于参数“A”,参数f是以ASCII字符显示树状结构以表明进程之间的关系,符号“|”是管道的意思,grep命令是一个强大的文本搜索命令,即全局正则表达式版本,使用权限是所有用户。
1.3  启动命令:# /usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 150 -u cpt     参数-d表示以守护进程的模式启动,即terminal退出以后程序依然运行;-l表示ip;-p表示端口;-m是要分配给该进程的内存大小,以M为单位;-u表示用户身份

2.客户端安装:先安装Libmemcached,然后为PHP安装memcached扩展
2.1  安装Libmemcached:https://launchpad.net/libmemcached
.下载安装包libmemcached-1.0.18.tar.gz
.解压:# tar zxvf libmemcached-1.0.18.tar.gz
.配置路径:# ./configure  --prefix=/usr/lib/libmemcached
.安装:# make && make install
2.2  PHP安装memcached扩展:http://pecl.php.net/package/memcached
.下载扩展安装包:memcached-2.2.0.tgz
.解压:# tar zxvf memcached-2.2.0.tgz
.进入该目录: # cd memcached-2.2.0
.运行phpize会多出一个配置文件:phpize
.配置:# ./configure
如果找不到php-config,请使用./configure --with-php-config=PATH,其中PATH是PHP的安装路径;
如果找不到安装的扩展的目录(因为我们的Libmemcached安装在别的地方了),请加上参数指明扩展安装的地方 --with-libmemcached-dir=/usr/lib/libmemcached;
如果不支持sasl.h,请加上参数说明 --disable-memecached-sasl
.安装:# make && make install
.安装成功后提示:Installing shared extensions:    /usr/lib/php/modules/
.在php.ini配置文件最后追加扩展:# vim etc/php.ini,在文件底部G加入:extension=/usr/lib/php/modules/memcached.so
.重启服务器即可
2.3 查看是否安装扩展完成:
.# php -m | grep memcached
//============================================================================================================//
二、memcache类的操作和封装
1.系统类:
addServer/addServers/getStats/getVersion

2.数据类:
add/set/delete/flush/replace/increment/get

3.进阶类:
setMulti/deleteMulti/getMulti/getResultCode/getResultMessage

4.操作:
$memcache = new Memcached();
$memcache->addServer('127.0.0.1', 11211);

/*多台服务器*/
$ipArr = array(
array('127.0.0.1', 11211),
array('102.2.10.22', 11211),
//...
);
$memcache->addServers($ipArr);

print_r($memcache->getStats());
print_r($memcache->getVersion());

/**
* $memcache->add(key,val,timeout)
* add方法第一个参数为key值,第二个参数为value值,第三个参数为失效时间,如果为0表示永久生效
* add方法重复调用不会覆盖掉原来的值,要覆盖请使用replace()
* 第一次调用脚本可以成功覆盖掉mkey,第二次就不能了
*/
$memcache->add('mkey','mvalue', 600);
echo $memcache->get('mkey')."\n";

$memcache->replace('mkey', 'mvalue2', 600);
echo $memcache->get('mkey')."\n";

/**
* $memcache->set(key,val,timeout)方法当不存在的时候新建,存在的话进行覆盖
*/
$memcache->set('mkey', 'mvalue3', 600);
echo $memcache->get('mkey');

/**
* $memcache->delete(key)方法删除某个key的value值
*/
$memcache->delete('mkey');
echo $memcache->get('mkey');

/**
* $memcache->flush()清空掉memcached中的所有缓存
*/
$memcache->flush();
echo $memcache->get('mkey');

/**
* $memcache->increment(key,offset,timeout)方法对整数按某个偏移量进行递增操作
*/
$memcache->set('num', 5, 0);
$memcache->increment('num', 5);
echo $memcache->get('num');

/**
* $memcache->decrement(key,offset,timeout)方法对整数按某个偏移量进行递减操作
*/
//============================================================================================================//
三、利用memcached进行批量操作
$memcache = new Memcached();
$memcache->addServer('127.0.0.1', 11211);
/*memcached实现批量操作*/
$dataAry = array(
'key' => 'val',
'key1' => 'val1',
'key2' => 'val2',
'key3' => 'val3',
'key4' => 'val4',
'key5' => 'val5',
'key6' => 'val6',
'key7' => 'val7',
'key8' => 'val8',
'key9' => 'val9',
'key10' => 'val10'
);

/**
* $memcache->setMulti(array,timeout)批量处理数据
*/
$memcache->setMulti($dataAry,0);

/**
* $memcache->getMulti(array())批量获取数据
*/
$result = $memcache->getMulti(array('key','key1','key2'));
print_r($result);
//输出
// Array
// (
//     [key] => val
//     [key1] => val1
//     [key2] => val2
// )

/**
* $memcache->deleteMulti(array('key','key2'))删除多条数据
*/
$memcache->deleteMulti(array('key'));
echo $memcache->get('key')."\n";
echo $memcache->get('key1')."\n";
/**
* $memcache->getResultCode()获取执行的结果代码:0为成功,非0失败,具体参考手册
*/
echo $memcache->getResultCode()."\n";
/**
* $memcache->getResultMessage()获取操作结果的信息
*/
echo $memcache->getResultMessage()."\n";
//===========================================================================================================================//
四、封装自己的memcache类
//应具有如下特点:
//扩展性:既支持memcache又支持memcached
//可调试:
//尽量简便的操作,一个方法多种功能
//详见:http://benbird.cc/post/29
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: