• 缓存MEMCACHE 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:

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

    运行输出可见:

  • 相关阅读:
    内置函数
    递归函数:
    函数(迭代器与生成器)
    函数的装饰器
    函数:(函数的名字,闭包)
    函数(命名空间,作用域,嵌套)
    函数:(定义,调用,返回值和参数)
    hdu 4267 A Simple Problem with Integers(线段树)
    hdu 2089 不要62 hdu 3555 Bomb (数位DP)
    poj 2955 Brackets (区间DP)
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/10309018.html
Copyright © 2020-2023  润新知