我正在尝试使用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文档中阅读更多信息: