PHP的内存缓存机制(Memcached)
Memcached高性能的分布式的内存对象缓存系统 ,减轻对数据库频繁的访问
Memcached服务器端与客户端的安装与使用,请参看
http://www.rczjp.cn/HTML/110330/20113330083306.html
文件缓存的用法
http://www.rczjp.cn/HTML/110409/20115009055000.html
//-----------------------Code---------------//
function fetch_array($query, $result_type = MYSQL_ASSOC) {
return is_resource($query) ? mysql_fetch_array($query, $result_type) : $query[0];
}
function query_memcache($sql, $type = '') {
global $mem,$memcachelife;
//设置过期时间,1小时内都是从内存中获取数据[如果存在]
//小于等于0,表示永不过期
$memcachelife = 60 * 60;
$key = md5(strtoupper($sql));
if(!($query = $mem->get($key))) {
echo "从数据库中获取<br>";
$query = $this->query($sql, $type);
while($item = $this->fetch_array($query)) {
$res[] = $item;
}
$query = $res;
$mem->set($key, $query , 0, $memcachelife);
}
else{
echo "从内存缓存中获取<br>";
$mem->set($key, $query , 0, $memcachelife);
}
return $query;
}
function clear_memcache($sql){
global $mem;
$ret = null;
$key = md5(strtoupper($sql));
$ret = $mem->delete($key);
return $ret;
}
//------------------Test-----------//
$db = new dbstuff;
$db->connect('localhost', 'root', 'discuz', 'ceshi', 1, true, 'gbk');
$mem = new Memcache();
$mem -> connect('127.0.0.1',8888);
//$mem -> addServer('127.0.0.1',8888);//添加服务
//----首先从内存获取,没有获取到才从数据库里读取----//
$query = $db->query_memcache("SELECT * FROM Test ORDER BY RAND()");
foreach($query as $row){
echo $row['data']." | ";
}
结果显示
从内存缓存中获取
hello5 | hello1 | hello2 | hello4 | hello3 |
//----以下是数据库直接读取-----//
echo "<br><br>";
$query = $db->query("SELECT * FROM Test ORDER BY RAND()");
while($row=$db->fetch_array($query)){
echo $row['data']." | ";
}
结果显示
hello2 | hello3 | hello | hello4 | hello5 |
?>
<?
//清空缓存
$db->clear_memcache('SELECT * FROM Test ORDER BY RAND()');
//清空全部缓存内容,不是真的删除缓存的内容,只是使全部变量的缓存过时,内存中的内容被重写
//var_dump($mem->flush());
$memStats=$mem->getExtendedStats();//查看Memcache的详细运行情况
//$mem->getStats()
echo "<pre>";
print_r($memStats);
$mem->close();