2013-07-30 149 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來了..再次感謝。 –