<?php
/** 
 * memcache缓存类
 * @author bsw
 * @version 2014-03-10
 *
 */ 
class MCache {  
   /** 
	* Memcache 实例化对象
	*/
    private  $memcache;

	    
   /** 
	* conf_city  当前城市
	*/
    private  $conf_city; 

   /** 
	* memcache_flag  缓存开启标志，默认开启
	*/
    private  $memcache_flag; 

    /** 
	* Memcache缓存初始化-设置链接服务器
	* 配置文件中配置Memcache缓存服务器： 
	*/  
	function __construct($conf_city='',$memcache_flag=true){
		global $mc;
        $this->conf_city = $conf_city;
		$this->memcache_flag = $memcache_flag;
		$this->memcache = $mc;  ; 
	}
        function initMc($mc) {
            $this->memcache = $mc;
        }
	/** 
	* 获取memcache的key值
	* @param string/array  $mix_value 缓存key值
	* @param int $num 文件追踪标识，类内部调用时默认为2，外部调用时候为1
	* 当在类方法中调用时候，key前面会加上类名和方法名
	*/ 
	private function getKey($mix_value,$num=2){
		if (is_array($mix_value)){
			$mix_value = json_encode($mix_value);
		}
		$str = debug_backtrace(); 
		$str = @$str[$num];
		$key = @$str['class'].'.'.@$str['function'].'?';
		$key = $this->conf_city.".".$key.md5($mix_value);
		if (@$_GET['clearcache'] == 'clear') {
			$this->memcache->delete($key);
		}
		return $key;
	}
          
    /** 
     * Memcache缓存-设置缓存 
     * 设置缓存key，value和缓存时间 
     * @param  string $key   KEY值 
     * @param  string $value 值 
     * @param  string $time  缓存时间（默认3600秒）
     */  
    function set($key, $value, $time = 3600,$flag=0) {
		if($this->memcache_flag==false) return false;
		$key = $this->getKey($key);
        return $this->memcache->set($key, $value, $flag , $time);  
    }  
      
    /** 
     * Memcache缓存-获取缓存 
     * 通过KEY获取缓存数据 
     * @param  string $key   KEY值 
     */  
    function get($key) {
		if($this->memcache_flag==false) return false;
		$key = $this->getKey($key);
        return $this->memcache->get($key);  
    }  
      
    /** 
     * Memcache缓存-清除一个缓存 
     * 从memcache中删除一条缓存 
     * @param  string $key   KEY值 
     */  
    function delete($key) {
		$key = $this->getKey($key);
        return $this->memcache->delete($key);  
    } 
      
    /** 
     * 关闭Memcache链接 
     */  
    function close() {  
        return $this->memcache->close();  
    }  
      
    /** 
     * 获取Memcache的版本号 
     */  
    function getVersion() {  
        return $this->memcache->getVersion();  
    }  
      
    /** 
     * 获取Memcache的状态数据 
     */  
   function getStats() {  
        return $this->memcache->getStats();  
    }
	
    /** 
     * Memcache缓存-设置链接服务器 
     * 支持多MEMCACHE服务器 
     * 配置文件中配置Memcache缓存服务器：  
     * @param  array $servers 服务器数组-array(array('127.0.0.1', '11211')) 
      
    function add_server($servers) { 
		$this->memcache = new Memcache;  
        if (!is_array($servers) || empty($servers)) exit('memcache server is null!');  
        foreach ($servers as $val) {  
            $this->memcache->addServer($val[0], $val[1]);  
        }     
    }*/

	/** 
     * 替换数据 
     * @param string $key 期望被替换的数据 
     * @param string $value 替换后的值 
     * @param int    $time  时间值 
     * @param bool   $flag  是否进行压缩 
     */  
    //function replace($key, $value, $time = 3600, $flag = 0) {  
    //    return $this->memcache->replace($key, $value, $flag, $time);  
    //}  

	    /** 
     * Memcache缓存-清空所有缓存 
     * 不建议使用该功能 
     * @return 
     */  
    //function clear_all() {  
    //    return $this->memcache->flush();  
    //}  
      
    /** 
     * 字段自增-用于记数 
     * @param string $key  KEY值 
     * @param int    $step 新增的step值 
     */  
    //function  increment($key, $step = 1) {  
    //    return $this->memcache->increment($key, (int) $step);  
    //}  
      
    /** 
     * 字段自减-用于记数 
     * @param string $key  KEY值 
     * @param int    $step 新增的step值 
     */  
    //function decrement($key, $step = 1) {  
    //    return $this->memcache->decrement($key, (int) $step);  
    //}      
}  

?>
