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

PHP调用MEMCACHE高速缓存技术实例

发布:smiling 来源: PHP粉丝网  添加日期:2020-03-05 15:44:06 浏览: 评论:0 

在项目中,涉及大访问量时,合理的使用缓存能减轻数据库的压力,同时提升用户体验。即在非实时性的需求的前提下,一小段时间内(若干秒),用于显示的数据从缓存中获取的,而不用直接读取数据库,能有效的减少数据库的读取压力。这里记录一下php语言使用memcache的情形:

首先,我们建立一个memcachepool,可以根据不同的配置读取,生成不同的memcache实例。用到$memcache->addServer($host,$port,$flag);向连接池中添加一个memcache服务器。代码示例如下:

  1. class memcachePool{ 
  2.  
  3.      private static $instance
  4.  
  5.      private $memcacheList = array(); 
  6.  
  7.     private function __construct(){ 
  8.  
  9.   
  10.  
  11.     } 
  12.  
  13.      public static function getInstance(){ 
  14.  
  15.          if(self::$instance != null) 
  16.  
  17.              return self::$instance
  18.  
  19.          self::$instance = new memcachePool(); 
  20.  
  21.          return self::$instance
  22.  
  23.      } 
  24.  
  25.     /** 
  26.  
  27.      * get memcache object from pool 
  28.  
  29.      * @param  [type] $host 服务器 
  30.  
  31.      * @param  [type] $port 端口 
  32.  
  33.      * @param  [type] $flag 控制是否使用持久化连接。默认TRUE 
  34.  
  35.      * @return [type] 
  36.  
  37.      */ 
  38.  
  39.      public function getMemcache($host,$port,$flag){ 
  40.  
  41.          if(isset($this->memcacheList[$host.$port])) 
  42.  
  43.              return $this->memcacheList[$host.$port]; 
  44.  
  45.   
  46.  
  47.         $memcache = new Memcache(); 
  48.  
  49.         // 向连接池中添加一个memcache服务器 
  50.  
  51.         $memcache->addServer($host,$port,$flag); 
  52.  
  53.         //开启大值自动压缩,第一个参数表示处理数据大小的临界点,第二个参数表示压缩的比例,默认为0.2 
  54.  
  55.         $memcache->setCompressThreshold(2000,0.2); 
  56.  
  57.         $this->memcacheList[$host.$port] = $memcache
  58.  
  59.         return $memcache
  60.  
  61.      } 
  62.  
  63.  } 

接着实现一个包含memcache常用方法如add,set,get,flush,delete等的方法类,这里命名为dlufmemcache

  1. class dlufMemcache{ 
  2.  
  3.      private $memcache = null; 
  4.  
  5.      function __construct($host,$port){ 
  6.  
  7.   
  8.  
  9.        $this->memcache = memcachepool::getInstance()->getMemcache($host,$port,true); 
  10.  
  11.      } 
  12.  
  13.     /** 
  14.  
  15.      * memcache set value 
  16.  
  17.      * @param [type]  $key 键 
  18.  
  19.      * @param [type]  $value 值 
  20.  
  21.      * @param integer $expire  到期的时间,如果此值设置为0表明此数据永不过期 
  22.  
  23.      * @param integer $flag 标志位 使用MEMCACHE_COMPRESSED指定对值进行压缩(使用zlib) 
  24.  
  25.      * @param [type]  $serializetype 
  26.  
  27.      */ 
  28.  
  29.      public function set($key,$value,$expire=0,$flag=0,$serializetype=null){ 
  30.  
  31.         if($serializetype == 'json' && is_array($value)){ 
  32.  
  33.             $value = json_encode($value); 
  34.  
  35.         } 
  36.  
  37.          $this->memcache->set($key,$value,$flag,$expire); 
  38.  
  39.      } 
  40.  
  41.     /** 
  42.  
  43.      * 从服务端查找元素 
  44.  
  45.      * @param  [type] $key 
  46.  
  47.      * @return [type] 
  48.  
  49.      */ 
  50.  
  51.      public function get($key){ 
  52.  
  53.          return $this->memcache->get($key); 
  54.  
  55.      } 
  56.  
  57.     /** 
  58.  
  59.      * 增加一个条目到缓存服务器 
  60.  
  61.      * @param [type]  $key 
  62.  
  63.      * @param [type]  $value 
  64.  
  65.      * @param integer $expire 
  66.  
  67.      * @param integer $flag 
  68.  
  69.      * @param [type]  $serializetype 
  70.  
  71.      */ 
  72.  
  73.     public function add($key,$value,$expire=0,$flag=0,$serializetype=null){ 
  74.  
  75.         if($serializetype == 'json' && is_array($value)){ 
  76.  
  77.             $value = json_encode($value); 
  78.  
  79.         } 
  80.  
  81.         $ret = $this->memcache->add($key,$value,$flag,$expire); 
  82.  
  83.         return $ret
  84.  
  85.     } 
  86.  
  87.     /** 
  88.  
  89.      * 清洗(删除)已经存储的所有的元素 
  90.  
  91.      * @return [type] 
  92.  
  93.      */ 
  94.  
  95.     public function flush(){ 
  96.  
  97.         return $this->memcache->flush(); 
  98.  
  99.     } 
  100.  
  101.     /** 
  102.  
  103.      *  从服务端删除一个元素 
  104.  
  105.      * @param  [type] delete 参数:key要删除的元素的key 删除该元素的执行时间 timeout如果值为0,则该元素立即删除。 
  106.  
  107.      * @return [type] 
  108.  
  109.      */ 
  110.  
  111.     public function delete($key){ 
  112.  
  113.         $ret = $this->memcache->delete($key,0); 
  114.  
  115.         return $ret
  116.  
  117.     } 
  118.  
  119.  } 

然后调用dlufmemcache:

  1. $memcache = new dlufMemcache('127.0.0.1',11211); 
  2.  
  3. $memcache->set('memcache','come on dluf&baidu !!!!!!'); 
  4.  
  5. $ret = $memcache->get('memcache'); 
  6.  
  7. echo print_r($ret,true);

Tags: MEMCACHE PHP高速缓存

分享到: