사용자 도구

사이트 도구


java:spymemcached

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
java:spymemcached [2013/07/08 18:13]
kwon37xi 새로 만듦
java:spymemcached [2016/12/09 07:56] (현재)
kwon37xi [Spymemcached]
줄 1: 줄 1:
 ====== Spymemcached ====== ====== Spymemcached ======
 +  * [[http://code.google.com/p/spymemcached/|Spymemcached]]
 +  * [[https://github.com/kwon37xi/spymemcached-extra-transcoders|Spymemcached extra transcoders]]
 +===== 비동기 - Async =====
 +spymemcached의 대부분의 작업은 비동기로 이루어지는 것으로 보인다.
 +예를들면 ''memcachedClient.flush()'' 같은 경우, flush 직후 바로 ''memcachedClient.shutdown()''을 해버리면 flush가 안된 상태로 끝나버린다.
 +
 +이는 다음과 같이 해야 올바로 flush가 된다.
 +<code java>
 +final OperationFuture<Boolean> flush = memcachedClient.flush();
 +while(!flush.isDone()) {
 +    log.debug("Waiting for flushing.");
 +    TimeUnit.MILLISECONDS.sleep(20); // 잠시 기다려줌.
 +}
 +</code>
 +이 처럼 많은 Operation들이 비동기로 이루어지므로 동기가 중요한 요소에서는 ''Future''를 올바르게 조정해야 한다.
 +
 +===== 기본 Spring 설정 =====
 +<code xml>
 +  <bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean">
 +    <property name="servers" value="host1:11211,host2:11211,host3:11211"/>
 +    <property name="protocol" value="BINARY"/>
 +    <property name="transcoder">
 +      <bean class="net.spy.memcached.transcoders.SerializingTranscoder">
 +        <property name="compressionThreshold" value="1024"/>
 +      </bean>
 +    </property>
 +    <property name="opTimeout" value="1000"/>
 +    <property name="timeoutExceptionThreshold" value="1998"/>
 +    <property name="hashAlg" value="KETAMA_HASH"/>
 +    <property name="locatorType" value="CONSISTENT"/> 
 +    <property name="failureMode" value="Redistribute"/>
 +    <property name="useNagleAlgorithm" value="false"/>
 +  </bean>
 +</code>
 +
 +===== Operation Timeout =====
 +  * Full GC 동안 Operation Timeout 이 발생할 수 있다.
 +  * Full GC 시간을 참조하여 **opTimeout** 값을 적당하게 늘려준다.
 +
  
 ===== Logger 변경 ===== ===== Logger 변경 =====
-  * System Property ''net.spy.compat.log.LoggerImpl'' 값을 원하는 로거 클래스로 지정해야 한다.+  * System Property ''net.spy.log.LoggerImpl'' 값을 원하는 로거 클래스로 지정해야 한다. 
 +    * [[java:logback|Logback]]에에서 Groovy로 설정할 경우<code groovy> 
 +System.setProperty('net.spy.log.LoggerImpl', 'net.spy.memcached.compat.log.SLF4JLogger'
 +</code>
   * 로거 클래스는 ''net.spy.compat.log.Logger'' 를 구현해야 한다.   * 로거 클래스는 ''net.spy.compat.log.Logger'' 를 구현해야 한다.
-  * [[http://code.google.com/p/spymemcached/issues/attachmentText?id=161&aid=1610002000&name=Slf4jLogger.java&token=oMqmQ8xEfx0J5Tt0d7vKjHiwi_c%3A1373273629632|Slf4jLogger]]+  * 이제 불필요 : [[http://code.google.com/p/spymemcached/issues/attachmentText?id=161&aid=1610002000&name=Slf4jLogger.java&token=oMqmQ8xEfx0J5Tt0d7vKjHiwi_c%3A1373273629632|Slf4jLogger]] {{:java:spymemcachedslf4jlogger.java.gz|}} 
 +  * 공식 Slf4j 로거 : ''net.spy.memcached.compat.log.SLF4JLogger'' 
 +===== incr/decr ===== 
 +  * incr,decr의 경우 ''Long.MAX_VALUE''(9223372036854775807)에 도달할 경우 문제가 발생할 수 있다. 
 +  * Binary 프로토콜 : ''-9223372036854775808'' 로 계속된다. 
 +  * ASCII 프로토콜 : 예외가 발생하지만 로그로 찍고나서 ''-1''을 리턴한다. incr을 실행할 때마다 계속 예외가 발생하며 계속해서 ''-1''만 리턴한다. 
 +  * 값을 증가/감소 시키지 않고 읽기만 하기 
 +    * ''incr/decr'' 메소드의 ''by'' 인자를 0 으로 주며 값 변경 없이 읽기만 수행한다. 
 + 
 +==== 기타 ==== 
 +  * [[http://techs-learned.blogspot.kr/2012/10/spymemcached-client.html|Proper spymemcached client]] 
java/spymemcached.1373274795.txt.gz · 마지막으로 수정됨: 2013/07/08 18:13 저자 kwon37xi