spymemcached의 대부분의 작업은 비동기로 이루어지는 것으로 보인다.
예를들면 memcachedClient.flush()
같은 경우, flush 직후 바로 memcachedClient.shutdown()
을 해버리면 flush가 안된 상태로 끝나버린다.
이는 다음과 같이 해야 올바로 flush가 된다.
final OperationFuture<Boolean> flush = memcachedClient.flush(); while(!flush.isDone()) { log.debug("Waiting for flushing."); TimeUnit.MILLISECONDS.sleep(20); // 잠시 기다려줌. }
이 처럼 많은 Operation들이 비동기로 이루어지므로 동기가 중요한 요소에서는 Future
를 올바르게 조정해야 한다.
<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>
net.spy.log.LoggerImpl
값을 원하는 로거 클래스로 지정해야 한다.net.spy.compat.log.Logger
를 구현해야 한다.net.spy.memcached.compat.log.SLF4JLogger
Long.MAX_VALUE
(9223372036854775807)에 도달할 경우 문제가 발생할 수 있다.-9223372036854775808
로 계속된다.-1
을 리턴한다. incr을 실행할 때마다 계속 예외가 발생하며 계속해서 -1
만 리턴한다.incr/decr
메소드의 by
인자를 0 으로 주며 값 변경 없이 읽기만 수행한다.