2

setOfKeys としてキーを使用して、一連の値を memcached クライアントに保存しています。次のようにmemcachedに値を入れています

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

4

1 に答える 1

2

MemcachedClient の set 関数と replace 関数は非同期で、Future を返します。操作が完了するまでブロックするには、返されたオブジェクトで .get() を呼び出す必要があります。

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

操作が成功したことを確認するために、上記のステートメントの戻り値も確認する必要があります。

于 2013-07-30T17:21:09.573 に答える