2013-07-30 101 views
2

我正在将一组值存储到memcached客户端,并将密钥设置为setOfKeys。 我把价值在分布式缓存如下net.spy.memcached.OperationTimeoutException:超时等待值

Set<String> keys=new HashSet<String>(); 
mMemcachedClient = new MemcachedClient(new BinaryConnectionFactory(), 
       AddrUtil.getAddresses("172.22.65.111:11211 172.22.65.11:11211")); 

public void put(Object key, Object value) throws Result { 

     try { 
      synchronized (mMemcachedClient) { 
       this.keys.add(key.toString()); 

       if(keys.size()==1){ 
        mMemcachedClient.set(String.valueOf(hg.hash("setOfKeys")), 
          7200, keys); 
       } 
       else{ 
        mMemcachedClient.replace(String.valueOf(hg.hash("setOfKeys")), 
          7200, keys); 
       } 
       mMemcachedClient.set(String.valueOf(hg.hash(key.toString())), 
         7200, value); 
      } 
     } catch (Excep`enter code here`tion ex) {`enter code here` 
      mLogger.error(ex.getMessage()); 
      throw new Result("ERROR_PUT_MEMCACHED_INTO_CACHE"); 
     } 
    } 

但是当我尝试从缓存中读取setOfKeys如下它给我的错误

net.spy.memcached.OperationTimeoutException: Timeout waiting for value

回答

2

设置和替换功能MemcachedClient是异步的并返回期货。您必须在返回的对象上调用.get(),以便在操作完成之前阻止它。

mMemcachedClient.set(String.valueOf(hg.hash("setOfKeys")), 7200, keys).get(); 

您还应该检查上述语句的返回值,以确保操作成功。

+0

时,我有我的唯一的本地服务器的memcached客户端作为mMemcachedClient =新MemcachedClient(新BinaryConnectionFactory(), \t \t \t \t AddrUtil.getAddresses( “172.22.65.111:11211”));它的工作原理fine.But当我增加服务器,比如mMemcachedClient =新MemcachedClient(新BinaryConnectionFactory()。那一次, \t \t \t \t AddrUtil.getAddresses(“172.22.65.111:11211 172.22.65.11:11211"));.Its做工作。它给了我Exceptiion net.spy.memcached.OperationTimeoutException:等待值的超时。 –

+0

尝试使用telnet连接到172.22.65.11,并发送一些命令,看看是否有效。如果没有,那么你或者有网络问题或者该机器上的memcached运行不正常。 – mikewied

+0

Thanx很多...问题是与其他server.After重新安装该服务器没有eXception来了..再次感谢。 –