当前位置 : 主页 > 网络编程 > PHP >

读取设置memcache的值(优先支持memcached扩展和cas协议)

来源:互联网 收集:自由互联 发布时间:2021-06-30
最近在项目中因为要防止并发,需要使用php的memcached扩展,memcached扩展支持cas协议,而memcache扩展却不支持。安装memcached过程中发现windows下并没有该扩展,为了保持代码的一致,就写了
最近在项目中因为要防止并发,需要使用php的memcached扩展,memcached扩展支持cas协议,而memcache扩展却不支持。安装memcached过程中发现windows下并没有该扩展,为了保持代码的一致,就写了一个既支持memcached又支持memcache的类,这样就不用担心生产和本地开发代码的不一致。(注:笔者平常工作在windows下开发,生产环境是Linux。如果你平常开发和生产环境都是linux或mac的话就不会有这个问题)
 
<?php
    //访问博客了解更多   http://back.zhizhi123.com/?p=143
    class ZMemcached
    {   
        static private $mem;
        //简单的单例模式,减少资源消耗
        static public function getinstance()
        {
            if(self::$mem==null)
            {
                //判断php是否安装了memcached扩展
                if(class_exists('Memcached'))
                {
                    self::$mem = new Memcached();
                }
                else
                {
                    self::$mem = new Memcache();
                }
            }
            return self::$mem;
        }
        static public function  get($key)
        {
            global $INI;
            if(class_exists('Memcached'))
            {
                $m1 = self::getinstance();
                //这里可以添加多个memecache server
                $m1->addServer($INI['memcachehost'], $INI['memcacheport']);
                $res['value'] = $m1->get($key, null, $cas);
                $res['cas'] = $cas;
            }
            else
            {
                $m1 = self::getinstance();
                $m1->addServer($INI['memcachehost'], $INI['memcacheport']);
                $res['value'] = $m1->get($key);
            }
            return $res;
        }
  
        static public function set($key,$value,$cas)
        {
            $value = (string)$value;
            global $INI;
            if(class_exists('Memcached'))
            {
                $m1 = self::getinstance();
                $m1->addServer($INI['memcachehost'], $INI['memcacheport']);
                $res = $m1->cas($cas,$key,$value);
            }
            else
            {
                $m1 = self::getinstance();
                $m1->addServer($INI['memcachehost'], $INI['memcacheport']);
                $res = $m1->set($key,$value);
            }
            return $res;
        }
    }

网友评论