现在的位置: 首页 > 综合 > 正文

PHP的内存缓存机制(Memcached)

2014年09月24日 ⁄ 综合 ⁄ 共 2214字 ⁄ 字号 评论关闭

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();

抱歉!评论已关闭.