用户登录
用户注册

分享至

memcached 官方文档

  • 作者: 用户57127498
  • 来源: 51数据库
  • 2020-10-15
是的



  在php提供的用于与memcached交互的扩展模块中有memcached与memcache,前者提供方法getallkeys用于遍历所有memcached服务器上的key,但是并不保证原子操作,而后者却没有提供任何方法,虽然在php官方 文档中有人给出使用方法getextendedstats来间接获取memcached服务器上的所有key,但是给出的代码是有不少坑的,如果拿来就用,对于cluster的memcached服务器而言,有些问题就需要指出来。 下面将给出官方文档中的代码,并指出可能面临的问题,代码如下: <?php /*\* * function to get all memcache keys * @author manish patel * @created: 28-may-2010 \*/ function getmemcachekeys() { &#36;memcache = new memcache; &#36;memcache->connect(&apos;127.0.0.1&apos;, 11211) or die ("could not connect to memcache server"); &#36;list = array(); &#36;allslabs = &#36;memcache->getextendedstats(&apos;slabs&apos;); &#36;items = &#36;memcache->getextendedstats(&apos;items&apos;); foreach(&#36;allslabs as &#36;server => &#36;slabs) { foreach(&#36;slabs as &#36;slabid => &#36;slabmeta) { &#36;cdump = &#36;memcache->getextendedstats(&apos;cachedump&apos;,(int)&#36;slabid); foreach(&#36;cdump as &#36;keys => &#36;arrval) { foreach(&#36;arrval as &#36;k => &#36;v){ echo &#36;k .""; } } } }//eo getmemcachekeys() ?> 在上述代码中,如果用于获取单个memcached服务器上的key,是不存在任何问题,但是获取连接池中的多个memcached所有key就存在问题,会发现打印出重复的key,问题就在于当使用getextendedstats用去特定&#36;slabid 上的信息时,返回的是连接池中所有的服务器上的特定&#36;slabid 的存储的keys信息。当&#36;server为"127.0.0.1:11214"且&#36;slabid为0将变量&#36;cdump的信息打印出如下所示: array(2) { ["127.0.0.1:11214"]=> array(1) { ["course_schools__??¨é?¨"]=> array(2) { [0]=> string(1) "0" [1]=> string(10) "12" } } ["127.0.0.1:11216"]=> array(1) { ["monitormemcache"]=> array(2) { [0]=> string(2) "10" [1]=> string(10) "12" } } } 当&#36;server为"127.0.0.1:11216"且&#36;slabid为0将变量&#36;cdump的信息打印出如下所示: array(2) { ["127.0.0.1:11214"]=> array(1) { ["course_schools__??¨é?¨"]=> array(2) { [0]=> string(1) "0" [1]=> string(10) "12" } } ["127.0.0.1:11216"]=> array(1) { ["monitormemcache"]=> array(2) { [0]=> string(2) "10" [1]=> string(10) "12" } } }
软件
前端设计
程序设计
Java相关