标签:
在 wamp 环境下进行测试:WAMPSERVER 2.2(Windows 7 + Apache 2.2.21 + PHP 5.3.10 + memcache 3.0.8 + Memcached 1.4.24)
在本地开启 Memcached 服务:
简单例子:
<?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect(‘127.0.0.1‘, 11211); //存储数据 $mc->set(‘name‘, ‘dee‘, 0, 20);//0:不适用zLib压缩 20:缓存20秒 //获取数据 $name = $mc->get(‘name‘); var_dump($name);
输出:
使用 telnet 客户端连接 Memcached 服务器,获取缓存数据:
20 秒后获取不到 key 为 name 的值。
简单例子2:
<?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect(‘127.0.0.1‘, 11211); //存储数据 $mc->set(‘name‘, ‘dee‘, 0, 20);//0:不适用zLib压缩 20:缓存20秒 //获取数据 $name = $mc->get(‘name‘); var_dump($name); //删除数据 $mc->delete(‘name‘); $name = $mc->get(‘name‘); var_dump($name); //强制刷新全部缓存,即清空Memcached服务器 $mc->flush(); //断开与Memcached服务器的连接 $mc->close();
输出:
简单例子3:
Memcache::getStats 获取服务器的统计信息,返回一个关联数组形式的服务器统计信息,值是统计信息的值,可以使用:reset,malloc,maps,cachedump,slabs,items,sizes,例:
<?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect(‘127.0.0.1‘, 11211); //获取服务器的统计信息 $serverStats = $mc->getStats(‘slabs‘); var_dump($serverStats);
输出:
Memcached 在存储数据时使用 Slab 内存分配算法,这种算法可以减少生成内存碎片,提高内存使用率。
又如:
<?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect(‘127.0.0.1‘, 11211); //获取服务器的统计信息 $serverStats = $mc->getStats(‘items‘); var_dump($serverStats);
输出:
又如:
<?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect(‘127.0.0.1‘, 11211); //获取服务器的统计信息 $serverStats = $mc->getStats(‘sizes‘); var_dump($serverStats);
输出:
简单例子4:
Memcache::getServerStatus,获取一个服务器的在线(1) / 离线状态(0)
<?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect(‘127.0.0.1‘, 11211); //获取服务器的统计信息 $serverStatus = $mc->getServerStatus(‘127.0.0.1‘, 11211); var_dump($serverStatus);
输出:int 1
说明:第一个参数是服务器域名或 IP ,第二个参数是端口,默认 11211
简单例子5:
通过把从数据库查询的结果保存到 Memcached 中,下次访问直接从 Memcached 中获取,从而减轻数据库的负担
<?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect(‘127.0.0.1‘, 11211); $id = (int)$_GET[‘id‘]; $sql = ‘select * from message where id = ‘.$id; $key = md5($sql); //判断数据库查询结果是否已经缓存到Memcached服务器中 $datas = $mc->get($key); if(!$datas) { //没有获取到缓存数据,则直接从MySQL中查询 $conn = mysql_connect(‘127.0.0.1‘, ‘root‘, ‘‘); mysql_select_db(‘msg‘); $result = mysql_query($sql); while($row = mysql_fetch_object($result)){ $datas[] = $row; } //将结果集保存到Memcached中 $mc->set($key, $datas); } var_dump($datas);
输出:
说明:通过 md5() 把要查询的 SQL 语句加密成一个唯一的 key,使用该 key 去 Memcached 中查询,如果已经有该缓存,则直接返回,如果没有,则去 MySQL 数据库中查询后返回结果并缓存到 Memcached 服务器中。
在 telnet 客户端中列出所有的 key:
#列出所有的 keys stats items //这条是命令 STAT items:4:number 1 STAT items:4:age 347 STAT items:4:evicted 0 STAT items:4:evicted_nonzero 0 STAT items:4:evicted_time 0 STAT items:4:outofmemory 0 STAT items:4:tailrepairs 0 STAT items:4:reclaimed 0 STAT items:4:expired_unfetched 0 STAT items:4:evicted_unfetched 0 STAT items:4:crawler_reclaimed 0 STAT items:4:crawler_items_checked 0 STAT items:4:lrutail_reflocked 0 END #通过 item id 获取 key,本例中是 4 #第 2 个参数为列出的长度, 0 代表全部列出 stats cachedump 4 0 //这条是命令 ITEM 378adbfe4fe7b6a2bbcad92d670db3c9 [91 b; 1443880812 s] END #通过 get 获取 key 值 get 378adbfe4fe7b6a2bbcad92d670db3c9 //这条是命令 VALUE 378adbfe4fe7b6a2bbcad92d670db3c9 1 91 a:1:{i:0;O:8:"stdClass":3:{s:2:"id";s:1:"1";s:7:"content";s:5:"hello";s:4:"flag";s:1:"3";}} END
如图所示,PHP 的 memcache 扩展会自动进行 serialize 和 unserialize ,因此可以直接存储数组或者对象。
参考:《Memcache 查看列出所有key方法》
Memcached 笔记与总结(4)memcache 扩展的使用
标签:
原文地址:http://www.cnblogs.com/dee0912/p/4853990.html