前两天写了 ​​memcached读书笔记一 ​​,偏重于理论,今天有时间主要是PHP中对Memcache的使用,闲话少叙,进入正题~

      PHP中的简单应用:

<?php
// 简单测试memcached
$mc = new Memcache;
$mc->connect('127.0.0.1', 11211);
$key = '';
$mc->set('key', 'flyer0126');
$ret = $mc->get('key');
print_r($ret);
//输出信息: flyer0126

 

      为了更好的调用,在此封装一下:

<?php
/**
* 单例模式构造Memcache 操作类
* @author flyer0126
* @since 2012/12
*/
class mem_cache extends Memcache
{
static $instance = NULL;
private $mem_cache_servers = "127.0.0.1:11211"; // 设置cache的host及port信息
private $prefix = 'flyer0126_'; // 设置key的前缀
public $is_cache = true; // 设置是否使用cache数据

/**
* 获取对象实例
* @return [type] [description]
*/
static function get_instance()
{
if (self::$instance == NULL) {
self::$instance = new mem_cache();
}
return self::$instance;
}

/**
* 构造函数私有化,防止外界调用
*/
private function __construct()
{
if (strpos(',', $this->mem_cache_servers)) {
$memcached_servers = explode(',', $this->mem_cache_servers);
}else{
$memcached_servers = array($this->mem_cache_servers);
}

// 向连接池中添加memcache服务器
foreach ($memcached_servers as $key => $value) {
list($server, $port) = explode(':', $value);
parent::addServer ($server, $port, false);
}
}

/**
* 根据key获取cache值
* @param [type] $key [description]
* @return [type] [description]
*/
function get($key)
{
if (!$this->is_cache || !strlen($key)) {
return false;
}

$key = $this->hash($key);
return parent::get($key);
}

/**
* 设置cache值
* @param [type] $key [description]
* @param [type] $value [description]
* @param integer $flag [description]
* @param integer $expire [description]
*/
function set($key, $value, $flag=0, $expire=0)
{
if (!strlen($key)) {
return false;
}

$key = $this->hash($key);
return parent::set($key, $value, $flag, $expire);
}

/**
* 对key进行md5加密
* @param [type] $key [description]
* @return [type] [description]
*/
function hash($key)
{
return md5($this->prefix.$key);
}

/**
* 删除对应key的cache值
* @param [type] $key [description]
* @return [type] [description]
*/
function delete($key)
{
if (!strlen($key)) {
return false;
}

$key = $this->hash($key);
return parent::delete($key);
}

/**
* 删除对应数组key的cache值
* @param [type] $key_ary [description]
* @return [type] [description]
*/
function delete_ary($key_ary)
{
if (!is_array($key_ary)) {
return false;
}

foreach ($key_ary as $item) {
$this->delete($item);
}
return true;
}

}

     测试一下:

<?php
// 测试例子
$mc = mem_cache::get_instance();
$mc->set('key', 'flyer0126');
$ret = $mc->get('key');
var_dump($ret); // string(9) "flyer0126"
$mc->is_cache = false;
$ret1 = $mc->get('key');
var_dump($ret1); // bool(false)
$mc->is_cache = true;
$ret2 = $mc->get('key');
var_dump($ret2); // string(9) "flyer0126"
$mc->delete('key');
$ret2 = $mc->get('key');
var_dump($ret2); // bool(false)

 

      Memcache 在PHP中应用更多的是存储数据库查询结果,原理是一致的,在此就不再赘述了~