当前位置:首页 > PHP教程 > php高级应用 > 列表

php操作memcache缓存方法分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-27 15:02:02 浏览: 评论:0 

一般来说,如果并发量不大的情况,使不使用缓存技术并没有什么影响,但如果高并发的情况,使用缓存技术就显得很重要了,可以很好的减轻数据库和服务器的压力,当然解决高并发的技术有很多,这里只是以缓存的角度来说明使用memcache的便捷性和方便性,使用memcache的前提是需要在服务端先配置好memcahche的环境!确认memcahce可以正常连接之后就可以在程序使用了!

  1. <?php 
  2. /** 
  3.  * Memcache缓存操作 
  4.  * @author hxm 
  5.  * @version 1.0 
  6.  * @since 2015.05.04 
  7.  */ 
  8. class MCache extends Object implements CacheFace 
  9.   private $mem = null; //Mem对象 
  10.      
  11.   private $sId = 1;  //servier服务ID 
  12.      
  13.   /** 
  14.    * 初始化Memcache 
  15.    * 
  16.    * @return Object 
  17.    */ 
  18.   public function __construct() 
  19.   { 
  20.     if ( !class_exists('Memcache') ) 
  21.     { 
  22.       throw new QException('PHP extension does not exist: Memcache'); 
  23.     } 
  24.     $this->mem = new Memcache(); 
  25.   } 
  26.      
  27.   /** 
  28.    * 链接memcahce服务 
  29.    * 
  30.    * @access private 
  31.    * @param  string $key 关键字 
  32.    * @param  string $value 缓存内容 
  33.    * @return array 
  34.    */ 
  35.   private function connect( $sid ) 
  36.   { 
  37.     $file = $this->CacheFile(); 
  38.     require $file
  39.     if(! isset($cache) ) 
  40.     { 
  41.       throw new QException('缓存配置文件不存在'.$file); 
  42.     } 
  43.     $server = $cache[$this->cacheId]; 
  44.     $sid  = isset($sid) == 0 ? $this->sId : $sid;//memcache服务选择 
  45.     if ( ! $server[$sid]) 
  46.     { 
  47.       throw new QException('当前操作的缓存服务器配置文件不存在'); 
  48.     } 
  49.     $host = $server[$sid]['host']; 
  50.     $port = $server[$sid]['port']; 
  51.     try { 
  52.       $this->mem->connect( $host , $port ); 
  53.     } catch (Exception $e) { 
  54.       exit('memecache连接失败,错误信息:'$e->getMessage()); 
  55.     } 
  56.   } 
  57.      
  58.   /** 
  59.    * 写入缓存 
  60.    * 
  61.    * @access private 
  62.    * @param  string $key 关键字 
  63.    * @param  string $value 缓存内容 
  64.    * @return array 
  65.    */ 
  66.   public function set( $key , $value , $sid , $expire = 0) 
  67.   { 
  68.     $data = $this->get($key , $sid); //如果已经存在key值 
  69.     if$data )  
  70.     { 
  71.       return $this->mem->set( $key , $value ,MEMCACHE_COMPRESSED , $expire); 
  72.     } else { 
  73.       return $this->mem->add( $key , $value ,MEMCACHE_COMPRESSED , $expire); 
  74.     } 
  75.   } 
  76.      
  77.   /** 
  78.    * 读取缓存 
  79.    * 
  80.    * @access private 
  81.    * @param  string $key 关键字 
  82.    * @param  int   $sid 选择第几台memcache服务器 
  83.    * @return array 
  84.    */ 
  85.   public function get( $key , $sid
  86.   { 
  87.     $this->connect( $sid ); 
  88.     return $this->mem->get($key); 
  89.   } 
  90.      
  91.   /** 
  92.    * 清洗(删除)已经存储的所有的元素 
  93.    * 
  94.    * @access private 
  95.    * @return array 
  96.    */ 
  97.   public function flush() 
  98.   { 
  99.     $this->connect(); 
  100.     return $this->mem->flush(); 
  101.   } 
  102.   /** 
  103.    * 删除缓存 
  104.    * 
  105.    * @access private 
  106.    * @param  string $key 关键字 
  107.    * @param  int   $sid 选择第几台memcache服务器 
  108.    * @return array 
  109.    */ 
  110.   public function remove( $key , $sid
  111.   { 
  112.     $this->connect(); 
  113.     return $this->mem->delete($key); 
  114.   } 
  115.      
  116.   /** 
  117.    * 析构函数 
  118.    * 最后关闭memcache 
  119.    */ 
  120.   public function __destruct() 
  121.   { 
  122.     /*if(! $this->mem) 
  123.     { 
  124.       $this->mem->close(); 
  125.     }*/ 
  126.   } 
  127. }

Tags: memcache

分享到: