5

spymemcached-2.8.4クライアントを使用してmemcachedに非常に基本的なヒット率モニターを設定しようとしていますが、memcachedに保存されている値が実際に増加することはありません...これはバグですか、それとも何かが足りませんか?

public static void checkHitRate(String clientId) throws FatalException, ForbiddenException {
    MemcachedClient memcachedClient;
    try {
        memcachedClient = new MemcachedClient(new InetSocketAddress("localhost", 11211));

        Integer hitRate = (Integer) memcachedClient.get(clientId);

        if (hitRate == null) {
            memcachedClient.set(clientId, 1800, 1);
        } else if (hitRate > 500) {
            throw new ForbiddenException("Hit rate too high. Try again later");
        } else if (hitRate <= 500) { 
            memcachedClient.incr(clientId, 1);
        } 

    } catch (IOException e) {
        throw new FatalException("Could not read hit rate from Memcached.");
    }
}

memcachedでその可能性を知っています:

(TELENT出力)

set clientId_1 0 200 1
1
STORED
incr clientId_1 1
2
get clientId_1
VALUE clientId_1 0 1
2
END
4

2 に答える 2

6

incr / decrの場合、memcachedサーバーは、格納されている値を整数の文字列表現と見なします。

次のようなアイテムを追加する

    memcachedClient.set(clientId, 1800, 1);

値を整数として追加するため、memcachedは値をインクリメントできません。

使用する

    memcachedClient.set(clientId, 1800, "1");

代わりは。必要に応じて動作します。

于 2013-10-31T10:33:24.760 に答える
2

別の増分署名を使用できます。

System.out.println("Incr result: " + memcachedClient.incr("testIncrKey", 1, 1));

これは、spymemcached-2.8.4クライアントで機能します。

また、incrspymemcachedに問題があったようです。

整数は文字列に変換されてmemcachedサーバーに文字列として保存されるため、使用しないでください。

xmemcachedを使用して開くと、特定のCounterコンストラクトを使用できます。

Counter counter=client.getCounter("counter",0);
counter.incrementAndGet();
counter.decrementAndGet();
counter.addAndGet(-10);

詳細については、xmemcachedのドキュメントをご覧ください。

于 2012-10-26T17:11:29.343 に答える