`

memcached读书笔记二

阅读更多

PS:原创文章,如需转载,请注明出处,谢谢!     

本文地址: http://flyer0126.iteye.com/blog/1751973    

 

      前两天写了 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中应用更多的是存储数据库查询结果,原理是一致的,在此就不再赘述了~

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics