一、什么是Memcached?
Memcached是key-value型的分布式存储系统,其使用目的缓存小块的任意数据(字符串、对象),一般用于缓存数据库查询结果,减少数据库的访问次数,提高Web应用的相应速度。目前主流编程语言都实现了Memcached的客户端
二、特点
- 协议简单
- 基于libevent的事件处理
- 内置内存存储方式
- memcached不互相通信的分布式
三、安装
个人使用OSX,OSX下用homebrew一键安装就可以了:brew install memcached
四、启动
我们在使用Memcached的时候,需要事先启动它,启动Memcached具有如下常用的启动设置项:
1、-d 启动一个守护进程
2、-m 分配给Memcached的内存数量,单位为MB
3、-u 运行Memcached的用户
4、-l 监听的服务器IP地址,可以监听多个地址
5、-p 监听的端口,端口号建议大于1024
6、-c 最大并发连接数,默认1024
7、-P 保存Memcached的pid文件
(查看更多的选项,可以使用memcached -h
)
我们可以即可以使Memcached作为前台程序运行,也可以常驻内存作为后台程序运行,只要启动的时候,加上-d
选项就可以了,通常情况下,作为前台服务,我们用如下的方式来启动:
memcached -p 11211 -m 64M -vv
加上-vv
的目的,是为了显示调试信息,作为后台服务的时候,可以这么启动:
memcached -d -m 64M -u root -l 127.0.0.1 -p 11211 -P /tmp/memcached.pid
五、第一个运用Memcached的程序
$m = new Memcached;
$m->addServer("localhost", 11211);
$m->set("Hello", "World");
echo $m->get("Hello");
echo PHP_EOL;
六、Memcached API使用
Memcache对象具有如下的常用方法:
1、连接服务器
addServer($host, $port)
向服务器池增加一台服务器addServers($servers)
向服务器池增加多台服务器
2、设置值
set($key, $value, $expireTime)
,设置$key
的值为$value
,$expireTime
设置过期时间,单位为秒,0表示永不过期setMulti($itemsArray [, $expireTime])
同时设置多个项目cas($casToken, $key, $value [, $expireTime])
,“检查并设置(Check-And-Set)”的操作,仅在当前客户端最后一次取值后,该key对应的值没有被其他客户端修改的情况下,才能将值写入。检查是通过cas_token参数完成的。这个操作能够保证高并发下的数据安全,是通过系统级的冲突检测机制(乐观锁)实现的casByKey($casToken, $serverKey, $key, $value [, $expireTime])
setOption($optionConst, $value)
设置选项值setOptions($optionArray)
设置多个设置项
(注意,以下的方法均支持xxxByKey操作,最前面多了个$serverKey参数)
3、修改值
add($key, $value, $expireTime)
,向一个新的key设置值,如果key已存在,操作无效addByKey($serverKey, $key, $value, $expireTime)
,功能与add
相同,但是设定到serverKey为指定值的服务器上replace($key, $value, $expireTime)
,用于替换应该已存在的key的值和过期时间(和set的区别就是如果key不存在的时候,操作将失效)append($key, $value)
,向已存在的key的value附加数据,相当于+=
操作prepend($key, $value)
,向已存在的key的value的开头处
追加数据increment($key, $offset)
,key的数值 += $offset,offset默认值为1decrement($key, $offset)
,key的数值 -= $offset,offset默认值为1touch($key, $expireTime)
,修改过期时间
4、删除值
delete($key, $time)
,$time表示删除时间(数值为多少秒后删除,0表示立即删除,UNIX时间戳为具体时间删除)deleteMulti($keysArray [, $time = 0 ])
一次删除多个项目flush([$time = 0])
清除所有的元素
5、获取值
getOption($optionConst)
获取设置项的值,如getOption(Memcached::OPT_COMPRESSION)
get($key)
获取键为$key的值getAllKeys()
获取在所有服务器中存储的keysgetDelayed($keysArray [, $withCas])
请求多个元素,当要收集的时候用fetch()
(迭代收集)或者fetchAll()
(一次性收集)getMulti($keysArray)
,同时检索多个元素,如:
$m->set("int", 99);
$m->set("string", "Hello, world!");
$m->set("array", [1, 2, 3, 4]);
print_r($m->getMulti(['int', 'string', 'array']));
/* 返回:
Array
(
[int] => 99
[string] => Hello, world!
[array] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
)
*/
getResultCode()
获取最后一次操作结果的代码,获取结果信息则用getResultMessage()
getServerByKey($serverKey)
获取一个key所映射的服务器信息getServerList()
返回服务器池中的所有服务器信息