[{"data":1,"prerenderedAt":370},["ShallowReactive",2],{"blog:\u002Fblog\u002F2015\u002F09\u002F19\u002Fphp-memcached-cas\u002F":3},{"id":4,"title":5,"body":6,"categories":355,"comments":45,"date":357,"description":358,"draft":359,"extension":360,"legacySlug":361,"meta":362,"navigation":45,"path":363,"seo":364,"stem":365,"tags":366,"updated":368,"__hash__":369},"blog\u002Fblog\u002F2015\u002F09\u002F19\u002Fphp-memcached-cas.md","读取设置memcache的值（优先支持memcached扩展和cas协议）",{"type":7,"value":8,"toc":353},"minimark",[9,13,16,349],[10,11,12],"p",{},"最近在项目中因为要防止并发，需要使用php的memcached扩展，memcached扩展支持cas协议，而memcache扩展却不支持。安装memcached过程中发现windows下并没有该扩展，为了保持代码的一致，就写了一个既支持memcached又支持memcache的类，这样就不用担心生产和本地开发代码的不一致。（注：笔者平常工作在windows下开发，生产环境是Linux。如果你平常开发和生产环境都是linux或mac的话就不会有这个问题）",[10,14,15],{},"下面就直接贴出代码了：",[17,18,23],"pre",{"className":19,"code":20,"language":21,"meta":22,"style":22},"language-php shiki shiki-themes github-light github-dark","\u003C?php\nclass ZMemcached {\n\n        static private $mem;\n\n        \u002F\u002F简单的单例模式，减少资源消耗\n\n        static public function getinstance()\n        {\n                if (self::$mem==null)\n                {\n                        \u002F\u002F判断php是否安装了memcached扩展\n                        if (class_exists('Memcached'))\n                        {\n                                self::$mem = new Memcached();\n                        } else {\n                                self::$mem = new Memcache();\n                        }\n                }\n                return self::$mem;\n        }\n\n        static public function get($key)\n        {\n                global $INI;\n                if (class_exists('Memcached'))\n                {\n                        $m1 = self::getinstance();\n                        \u002F\u002F这里可以添加多个memecache server\n                        $m1->addServer($INI['memcachehost'], $INI['memcacheport']);\n                        $res['value'] = $m1->get($key, null, $cas);\n                        $res['cas'] = $cas;\n                } else {\n                        $m1 = self::getinstance();\n                        $m1->addServer($INI['memcachehost'], $INI['memcacheport']);\n                        $res['value'] = $m1->get($key);\n                }\n                return $res;\n        }\n\n        static public function set($key,$value,$cas)\n        {\n                $value = (string)$value;\n                global $INI;\n                if (class_exists('Memcached'))\n                {\n                        $m1 = self::getinstance();\n                        $m1->addServer($INI['memcachehost'], $INI['memcacheport']);\n                        $res = $m1->cas($cas,$key,$value);\n                } else {\n                        $m1 = self::getinstance();\n                        $m1->addServer($INI['memcachehost'], $INI['memcacheport']);\n                        $res = $m1->set($key,$value);\n                }\n                return $res;\n        }\n}\n","php","",[24,25,26,34,40,47,53,58,64,69,75,81,87,93,99,105,111,117,123,129,135,141,147,153,158,164,169,175,181,186,192,198,204,210,216,222,227,232,238,243,249,254,259,265,270,276,281,286,291,296,301,307,312,317,322,328,333,338,343],"code",{"__ignoreMap":22},[27,28,31],"span",{"class":29,"line":30},"line",1,[27,32,33],{},"\u003C?php\n",[27,35,37],{"class":29,"line":36},2,[27,38,39],{},"class ZMemcached {\n",[27,41,43],{"class":29,"line":42},3,[27,44,46],{"emptyLinePlaceholder":45},true,"\n",[27,48,50],{"class":29,"line":49},4,[27,51,52],{},"        static private $mem;\n",[27,54,56],{"class":29,"line":55},5,[27,57,46],{"emptyLinePlaceholder":45},[27,59,61],{"class":29,"line":60},6,[27,62,63],{},"        \u002F\u002F简单的单例模式，减少资源消耗\n",[27,65,67],{"class":29,"line":66},7,[27,68,46],{"emptyLinePlaceholder":45},[27,70,72],{"class":29,"line":71},8,[27,73,74],{},"        static public function getinstance()\n",[27,76,78],{"class":29,"line":77},9,[27,79,80],{},"        {\n",[27,82,84],{"class":29,"line":83},10,[27,85,86],{},"                if (self::$mem==null)\n",[27,88,90],{"class":29,"line":89},11,[27,91,92],{},"                {\n",[27,94,96],{"class":29,"line":95},12,[27,97,98],{},"                        \u002F\u002F判断php是否安装了memcached扩展\n",[27,100,102],{"class":29,"line":101},13,[27,103,104],{},"                        if (class_exists('Memcached'))\n",[27,106,108],{"class":29,"line":107},14,[27,109,110],{},"                        {\n",[27,112,114],{"class":29,"line":113},15,[27,115,116],{},"                                self::$mem = new Memcached();\n",[27,118,120],{"class":29,"line":119},16,[27,121,122],{},"                        } else {\n",[27,124,126],{"class":29,"line":125},17,[27,127,128],{},"                                self::$mem = new Memcache();\n",[27,130,132],{"class":29,"line":131},18,[27,133,134],{},"                        }\n",[27,136,138],{"class":29,"line":137},19,[27,139,140],{},"                }\n",[27,142,144],{"class":29,"line":143},20,[27,145,146],{},"                return self::$mem;\n",[27,148,150],{"class":29,"line":149},21,[27,151,152],{},"        }\n",[27,154,156],{"class":29,"line":155},22,[27,157,46],{"emptyLinePlaceholder":45},[27,159,161],{"class":29,"line":160},23,[27,162,163],{},"        static public function get($key)\n",[27,165,167],{"class":29,"line":166},24,[27,168,80],{},[27,170,172],{"class":29,"line":171},25,[27,173,174],{},"                global $INI;\n",[27,176,178],{"class":29,"line":177},26,[27,179,180],{},"                if (class_exists('Memcached'))\n",[27,182,184],{"class":29,"line":183},27,[27,185,92],{},[27,187,189],{"class":29,"line":188},28,[27,190,191],{},"                        $m1 = self::getinstance();\n",[27,193,195],{"class":29,"line":194},29,[27,196,197],{},"                        \u002F\u002F这里可以添加多个memecache server\n",[27,199,201],{"class":29,"line":200},30,[27,202,203],{},"                        $m1->addServer($INI['memcachehost'], $INI['memcacheport']);\n",[27,205,207],{"class":29,"line":206},31,[27,208,209],{},"                        $res['value'] = $m1->get($key, null, $cas);\n",[27,211,213],{"class":29,"line":212},32,[27,214,215],{},"                        $res['cas'] = $cas;\n",[27,217,219],{"class":29,"line":218},33,[27,220,221],{},"                } else {\n",[27,223,225],{"class":29,"line":224},34,[27,226,191],{},[27,228,230],{"class":29,"line":229},35,[27,231,203],{},[27,233,235],{"class":29,"line":234},36,[27,236,237],{},"                        $res['value'] = $m1->get($key);\n",[27,239,241],{"class":29,"line":240},37,[27,242,140],{},[27,244,246],{"class":29,"line":245},38,[27,247,248],{},"                return $res;\n",[27,250,252],{"class":29,"line":251},39,[27,253,152],{},[27,255,257],{"class":29,"line":256},40,[27,258,46],{"emptyLinePlaceholder":45},[27,260,262],{"class":29,"line":261},41,[27,263,264],{},"        static public function set($key,$value,$cas)\n",[27,266,268],{"class":29,"line":267},42,[27,269,80],{},[27,271,273],{"class":29,"line":272},43,[27,274,275],{},"                $value = (string)$value;\n",[27,277,279],{"class":29,"line":278},44,[27,280,174],{},[27,282,284],{"class":29,"line":283},45,[27,285,180],{},[27,287,289],{"class":29,"line":288},46,[27,290,92],{},[27,292,294],{"class":29,"line":293},47,[27,295,191],{},[27,297,299],{"class":29,"line":298},48,[27,300,203],{},[27,302,304],{"class":29,"line":303},49,[27,305,306],{},"                        $res = $m1->cas($cas,$key,$value);\n",[27,308,310],{"class":29,"line":309},50,[27,311,221],{},[27,313,315],{"class":29,"line":314},51,[27,316,191],{},[27,318,320],{"class":29,"line":319},52,[27,321,203],{},[27,323,325],{"class":29,"line":324},53,[27,326,327],{},"                        $res = $m1->set($key,$value);\n",[27,329,331],{"class":29,"line":330},54,[27,332,140],{},[27,334,336],{"class":29,"line":335},55,[27,337,248],{},[27,339,341],{"class":29,"line":340},56,[27,342,152],{},[27,344,346],{"class":29,"line":345},57,[27,347,348],{},"}\n",[350,351,352],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":22,"searchDepth":36,"depth":36,"links":354},[],[356],"PHP","2015-09-19 17:05:12","最近在项目中因为要防止并发，需要使用php的memcached扩展，memcached扩展支持cas协议，而memcache扩展却不支持。安装memcached过程中发现windows下并没有该扩展，为了保持代码的一致，就写了一个既支持memcached又支持memcache的类，这样就不用担心生产",false,"md","php-memcached-cas",{},"\u002Fblog\u002F2015\u002F09\u002F19\u002Fphp-memcached-cas",{"title":5,"description":358},"blog\u002F2015\u002F09\u002F19\u002Fphp-memcached-cas",[356,367],"memcached",null,"gvVlMlbIYrRiMXxNoQS6bOhiXpbP_vk3F67dkJ3Oe0k",1783807996125]