2012-10-25 1 views
3

나는 memcached에서 매우 기본적인 조회 율 모니터를 설정하려고하지만, memcached에 저장된 값은 실제로 증가하지 않는 것 같습니다 ... 이것은 버그입니까? 내가 뭔가 빠진거야? spymemcached 클라이언트에서 'incr'사용

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와 그것의 수를 알고

당신은 다른 증분 서명 사용할 수 있습니다

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

텔넷을 사용하여 memcached 서버에 연결하여이 작업을 수동으로 수행 해 보셨습니까? 작동합니까? memcached 명령을 참조하십시오 : http://www.javaworld.com/javaworld/jw-04-2012/120418-memcached-for-java-enterprise-performance.html?page=3 – user1697575

+0

예, 편집 가능합니다 (편집 참조). .. – travega

+0

memcached 서버 (예 : memcached -vv 실행)에서 자세한 정보 표시 모드를 활성화하여 incr 작업 중 서버에서 오류를 봅니다 (Java에서 "CLIENT_ERROR는 숫자가 아닌 값을 증가 또는 감소시킬 수 없다는 불평"). 당신은 예외를 받아야한다 ... – user1697575

답변

4

/DECR memcached를 서버에 저장 고려합니다 값 :

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

는 xmemcached documentation에 더 많은 읽기 memcached가 정수 값을 증가시킬 수없는 정수 값.

사용

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

대신. 그것은 당신이 필요로 작동합니다.

2

(TELENT 출력) :

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

spymemcached-와 나를 위해 작동 2.8.4 클라이언트.

또한 issue with incr spymemcached 인 것처럼 보입니다.

Integer는 String으로 다시 변환되고 memcached 서버에 String으로 저장되므로 Integer를 사용하면 안됩니다.

xmemcached을 사용하여 열면 구체적인 카운터 구성을 사용할 수 있습니다.

memcachedClient.set(clientId, 1800, 1); 

가 추가

같은 항목을 추가, 정수의 문자열 표현으로

증분 들어
관련 문제