小怂包重生txttxt百度云 急求!

> php遍历memcache全部键值
php遍历memcache全部键值
ntcailu & &
发布时间: & &
浏览:12 & &
回复:0 & &
悬赏:0.0希赛币
php遍历memcache所有键值
  很有用的东东,PHP遍历MEMCACHE的所有键,在做管理memcache的时候会用到。
  $items=$this-&memcache-&getExtendedStats
('items');   
$items=$items["127.0.0.1:11211"]['items'];
foreach($items as $key=$>values)
$number=$ 
$str=$this-&memcache-&getExtendedStats
("cachedump",$number,0); 
$line=$str["127.0.0.1:11211"];     
is_array($line) &&
count($line)&0)
     
foreach($line as $key=$>value)
{         
          
$array[$key] =
$value[1];        
     
上面取到的是其键和该键的生成时间,键的过期时间好像取不到,找了很多地方,都没有说到该如何取键。
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&memcache读取和塞入数据的并发 - ITeye问答
关于memcache读取和塞入数据的并发是怎么处理的。。
&& 比方读取和塞入存在并发,这样读取的数据就有可能不准确,不知道怎么处理的。
问题补充:langshao 写道看看你就明白了。
首先谢谢您,我看了这篇文章,当我运行时报 net.spy.memcached.protocol.ascii.GetsOperationImpl:& Error:& ERROR这个错,我从网上搜索,没有得到答案。希望你。。
问题补充:langshao 写道引用首先谢谢您,我看了这篇文章,当我运行时报 net.spy.memcached.protocol.ascii.GetsOperationImpl:& Error:& ERROR这个错,我从网上搜索,没有得到答案。希望你。。
有没有详细一点的错误信息?
有:
引用
Exception in thread "main" java.lang.RuntimeException: Exception waiting for value
at net.spy.memcached.MemcachedClient.gets(MemcachedClient.java:883)
at net.spy.memcached.MemcachedClient.gets(MemcachedClient.java:900)
at com.jd.ac.service.CASTest.main(CASTest.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)
Caused by: java.util.concurrent.ExecutionException: OperationException: GENERAL
at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:72)
at net.spy.memcached.MemcachedClient.gets(MemcachedClient.java:878)
... 7 more
Caused by: OperationException: GENERAL
at net.spy.memcached.protocol.BaseOperationImpl.handleError(BaseOperationImpl.java:120)
at net.spy.memcached.protocol.ascii.OperationImpl.readFromBuffer(OperationImpl.java:130)
at net.spy.memcached.MemcachedConnection.handleReads(MemcachedConnection.java:401)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:333)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:219)
at net.spy.memcached.MemcachedClient.run(MemcachedClient.java:1591)
能否告诉我你的QQ啊,这样方便沟通
收藏 有用的东西
引用首先谢谢您,我看了这篇文章,当我运行时报 net.spy.memcached.protocol.ascii.GetsOperationImpl:& Error:& ERROR这个错,我从网上搜索,没有得到答案。希望你。。
有没有详细一点的错误信息?
看看你就明白了。
已解决问题
未解决问题> 博客详情
摘要: 侧重指出使用php Memcache模块提供现有的方法,如何正确遍历出memcached连接池里的所有KEY
& &在php提供的用于与memcached交互的扩展模块中有memcached与memcache,前者提供方法getAllKeys用于遍历所有Memcached服务器上的key,但是并不保证原子操作,而后者却没有提供任何方法,虽然在PHP官方 文档中有人给出使用方法getExtendedStats来间接获取Memcached服务器上的所有key,但是给出的代码是有不少坑的,如果拿来就用,对于cluster的memcached服务器而言,有些问题就需要指出来。
& & & &下面将给出官方文档中的代码,并指出可能面临的问题,代码如下:
* Function to get all memcache keys
* @author Manish Patel
* @Created:
28-May-2010
function getMemcacheKeys() {
$memcache = new M
$memcache-&connect('127.0.0.1', 11211) or die ("Could not connect to memcache server");
$list = array();
$allSlabs = $memcache-&getExtendedStats('slabs');
$items = $memcache-&getExtendedStats('items');
foreach($allSlabs as $server =& $slabs) {
foreach($slabs AS $slabId =& $slabMeta) {
$cdump = $memcache-&getExtendedStats('cachedump',(int)$slabId);
foreach($cdump AS $keys =& $arrVal) {
foreach($arrVal AS $k =& $v){
echo $k ."&br&";
}//EO getMemcacheKeys() ?&
& & & &在上述代码中,如果用于获取单个memcached服务器上的key,是不存在任何问题,但是获取连接池中的多个memcached所有key就存在问题,会发现打印出重复的key,问题就在于当使用getExtendedStats用去特定$slabID 上的信息时,返回的是连接池中所有的服务器上的特定$slabId 的存储的keys信息。当$server为"127.0.0.1:11214"且$slabId为0将变量$cdump的信息打印出如下所示:
array(2) {
["127.0.0.1:11214"]=&
array(1) {
["course_schools__??¨é?¨"]=&
array(2) {
string(1) "0" [1]=&
string(10) "" }
["127.0.0.1:11216"]=&
array(1) {
["monitorMemcache"]=&
array(2) {
string(2) "10" [1]=&
string(10) "" }
当$server为"127.0.0.1:11216"且$slabId为0将变量$cdump的信息打印出如下所示:
array(2) {
["127.0.0.1:11214"]=&
array(1) {
["course_schools__??¨é?¨"]=&
array(2) {
string(1) "0" [1]=&
string(10) "" }
["127.0.0.1:11216"]=&
array(1) {
["monitorMemcache"]=&
array(2) {
string(2) "10" [1]=&
string(10) "" }
也就是说,按照上述代码循环,会遭遇遍历不同memcached服务器时,对于某个$slabId,就有可能再次获取其他服务器此$slabId的信息(其他服务器也含有$slabId的值),因而在memcached是连接池的情景,会出现key重复的情况,使用上述代码, 为正确获取且不重复遍历连接池所有服务器的某特定$slabID信息,可以先统计出连接池所有memcached服务器中的不重复$slabId,再获取某$slabId信息,从而遍历出不重复的所有key以及value内容,关键代码片段如下:
$allSlabs = $memcache-&getExtendedStats('slabs');
foreach($allSlabs as $server =& $slabs)
foreach($slabs as $slabId =& $slabInfo)
44 if(isset($allSlabIds[$slabId]))
46 continue;
$allSlabIds[$slabId] = 1;
53 //再打印出key &
foreach($allSlabIds as $slabId =& $counter)
$cdump = $memObj-&getExtendedStats('cachedump',(int)$slabId);
foreach($cdump AS $keys =& $arrVal)-
59 if (!is_array($arrVal)) continue;
foreach($arrVal AS $k =& $v)-
echo $k ."&br&";
人打赏支持
码字总数 5859
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥

我要回帖

更多关于 小怂包txt 的文章

 

随机推荐