在spymemcached客户端使用'incr'

tra*_*ega 4 memcached counter increment hitcounter spymemcached

我正在尝试使用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.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道它在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
Run Code Online (Sandbox Code Playgroud)

小智 6

对于incr/decr,memcached服务器将存储的值视为整数的字符串表示,

添加像

    memcachedClient.set(clientId, 1800, 1);
Run Code Online (Sandbox Code Playgroud)

将值作为整数添加,这就是memcached无法增加它的原因.

使用

    memcachedClient.set(clientId, 1800, "1");
Run Code Online (Sandbox Code Playgroud)

代替.它会按你的需要工作.