加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-02-25 14:35:20 所属栏目:PHP教程 来源:互联网
导读:在项目中,涉及大访问量时,合理的使用缓存能减轻数据库的压力,同时提升用户体验。即在非实时性的需求的前提下,一小段时间内(若干秒),用于显示的数据从缓存中获取的,而不用直接读取数据库,能有效的减少数据库的读取压力。这里记录一下php语言使用me
  在项目中,涉及大访问量时,合理的使用缓存能减轻数据库的压力,同时提升用户体验。即在非实时性的需求的前提下,一小段时间内(若干秒),用于显示的数据从缓存中获取的,而不用直接读取数据库,能有效的减少数据库的读取压力。这里记录一下php语言使用memcache的情形:
 
  首先,我们建立一个memcachepool,可以根据不同的配置读取,生成不同的memcache实例。用到$memcache->addServer($host,$port,$flag);向连接池中添加一个memcache服务器。代码示例如下:
 
  class memcachePool{
  
       private static $instance;
  
       private $memcacheList = array();
  
      private function __construct(){
  
    
  
      }
  
       public static function getInstance(){
  
           if(self::$instance != null)
  
               return self::$instance;
  
           self::$instance = new memcachePool();
  
           return self::$instance;
  
       }
  
      /**
  
       * get memcache object from pool
  
       * @param  [type] $host 服务器
  
       * @param  [type] $port 端口
  
       * @param  [type] $flag 控制是否使用持久化连接。默认TRUE
  
       * @return [type]
  
       */
  
       public function getMemcache($host,$port,$flag){
  
           if(isset($this->memcacheList[$host.$port]))
  
               return $this->memcacheList[$host.$port];
  
    
  
          $memcache = new Memcache();
  
          // 向连接池中添加一个memcache服务器
  
          $memcache->addServer($host,$port,$flag);
  
          //开启大值自动压缩,第一个参数表示处理数据大小的临界点,第二个参数表示压缩的比例,默认为0.2
  
          $memcache->setCompressThreshold(2000,0.2);
  
          $this->memcacheList[$host.$port] = $memcache;
  
          return $memcache;
  
       }
  
   }
  接着实现一个包含memcache常用方法如add,set,get,flush,delete等的方法类,这里命名为dlufmemcache
 
  class dlufMemcache{
  
       private $memcache = null;
  
       function __construct($host,$port){
  
    
  
         $this->memcache = memcachepool::getInstance()->getMemcache($host,$port,true);
  
       }
  
      /**
  
       * memcache set value
  
       * @param [type]  $key 键
  
       * @param [type]  $value 值
  
       * @param integer $expire  到期的时间,如果此值设置为0表明此数据永不过期
  
       * @param integer $flag 标志位 使用MEMCACHE_COMPRESSED指定对值进行压缩(使用zlib)
  
       * @param [type]  $serializetype
  
       */
  
       public function set($key,$value,$expire=0,$flag=0,$serializetype=null){
  
          if($serializetype == 'json' && is_array($value)){
  
              $value = json_encode($value);
  
          }
  
           $this->memcache->set($key,$value,$flag,$expire);
  
       }
  
      /**
  
       * 从服务端查找元素
  
       * @param  [type] $key
  
       * @return [type]
  
       */
  
       public function get($key){
  
           return $this->memcache->get($key);
  
       }
  
      /**
      }
  
      /**
  
       * 清洗(删除)已经存储的所有的元素
  
       * @return [type]
  
       */
  
      public function flush(){
  
          return $this->memcache->flush();
  
      }
  
      /**
  
       *  从服务端删除一个元素
  
       * @param  [type] delete 参数:key要删除的元素的key 删除该元素的执行时间 timeout如果值为0,则该元素立即删除。
  
       * @return [type]
  
       */
  
      public function delete($key){
  
          $ret = $this->memcache->delete($key,0);
  
          return $ret;
  
      }
  
   }
  然后调用dlufmemcache:
 
  $memcache = new dlufMemcache('127.0.0.1',11211);
  
  $memcache->set('memcache','come on dluf&baidu !!!!!!');
  
  $ret = $memcache->get('memcache');
  
  echo print_r($ret,true);

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读