将'incr'与 spymemcached 客户端一起使用



我正在尝试使用Spymcached-2.8.4客户端设置一个非常基本的命中率监视器,但是存储在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 Output)

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

for eng/dep/dep amcached服务器将存储的值视为整数的字符串表示,

添加

之类的项目
    memcachedClient.set(clientId, 1800, 1);

将值添加为一个整数,这就是Memcached无法将其增加的原因。

使用

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

而是。它将根据需要工作。

您可以使用另一个递增签名:

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

与Spymcached-2.8.4客户端一起工作。

另外,似乎有一个问题的问题。

您不应使用整数,因为它将转换回字符串并将其存储为字符串,并在memcached Server上存储。

如果您使用Xmemcached打开,则可以使用特定的计数器结构,例如

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

在Xmemcached文档中阅读更多信息:

相关内容

最新更新