码迷,mamicode.com
首页 > 系统相关 > 详细

Memcached 笔记与总结(4)memcache 扩展的使用

时间:2015-10-04 00:22:59      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:

在 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!