Couchbase + xmemcached
Я использую couchbase и клиент xmemcached в многопоточном приложении java SE. Я постоянно наблюдаю, что couchbase не может сохранить последние несколько ключей, тогда как традиционная memcached отлично устанавливает все ключи. Я использую точно такую же конфигурацию xmemcachedclient в обоих случаях.
Конфигурация пружины
<bean name="memcachedClient" class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown">
<property name="configuration">
<bean class="com.google.code.yanf4j.config.Configuration">
<property name="handleReadWriteConcurrently" value="true" />
</bean>
</property>
<property name="servers">
<value>127.0.0.1:11211</value>
</property>
<!-- server's weights -->
<property name="weights">
<list>
<value>2</value>
</list>
</property>
<!-- nio connection pool size -->
<!-- <property name="connectionPoolSize" value="4"></property> -->
<!-- Use binary protocol,default is TextCommandFactory -->
<property name="commandFactory">
<bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory" />
</property>
<!-- Distributed strategy -->
<property name="sessionLocator">
<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator" />
</property>
<!-- Serializing transcoder -->
<property name="transcoder">
<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
</property>
<!-- ByteBuffer allocator -->
<property name="bufferAllocator">
<bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator" />
</property>
</bean>
ниже мой тестовый код, который проверяет отсутствие ключей
@Test
public void test100000HitMiss()
{
ArrayList<Integer> hits = new ArrayList<Integer>();
ArrayList<Integer> misses = new ArrayList<Integer>();
for(Integer i=0; i < 100000; i++)
{
try
{
Object val = memcachedClient.get("2/C/TALAL" + i.toString());
if(null == val)
misses.add(i);
else
hits.add(i);
}
catch (Exception ex)
{
logger.error(ex);
}
}
logger.info("Hits: " + hits.size() + " - Misses: " + misses.size());
}
Каждый раз, когда я запускаю этот тест, я получаю 3 или 4 ключа в массиве misses