加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2023-10-12 11:05:55 所属栏目:PHP教程 来源:
导读:在项目中,涉及大访问量时,合理的使用缓存能减轻数据库的压力,同时提升用户体验。即在非实时性的需求的前提下,一小段时间内 ,用于显示的数据从缓存中获取的,而不用直接读取数据库,能有效的减少数据库的读取压力
在项目中,涉及大访问量时,合理的使用缓存能减轻数据库的压力,同时提升用户体验。即在非实时性的需求的前提下,一小段时间内 ,用于显示的数据从缓存中获取的,而不用直接读取数据库,能有效的减少数据库的读取压力。这里记录一下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); 
 
     } 
 
    /** 
 
     * 增加一个条目到缓存服务器 
 
     * @param [type]  $key 
 
     * @param [type]  $value 
 
     * @param integer $expire 
 
     * @param integer $flag 
 
     * @param [type]  $serializetype 
 
     */ 
 
    public function add($key,$value,$expire=0,$flag=0,$serializetype=null){ 
 
        if($serializetype == 'json' && is_array($value)){ 
 
            $value = json_encode($value); 
 
        } 
 
        $ret = $this->memcache->add($key,$value,$flag,$expire); 
 
        return $ret; 
 
    } 
 
    /** 
 
     * 清洗已经存储的所有的元素 
 
     * @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);
 

(编辑:汽车网)

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

    推荐文章