Java 未返回的MemcachedClient cas操作已存在
我有以下使用net.spy.memcached.MemcachedClient的单元测试Java 未返回的MemcachedClient cas操作已存在,java,memcached,Java,Memcached,我有以下使用net.spy.memcached.MemcachedClient的单元测试 @Test public void testCASFailsWrite() throws Exception { Integer begin = new Integer(3); client.set(key, 0, begin); CASValue<Object> casValue = client.gets(key); Assert.assertNo
@Test
public void testCASFailsWrite() throws Exception {
Integer begin = new Integer(3);
client.set(key, 0, begin);
CASValue<Object> casValue = client.gets(key);
Assert.assertNotNull(casValue);
Assert.assertTrue(casValue.getValue() instanceof Integer);
Integer fromCache = (Integer) casValue.getValue();
Integer nextSeq = new Integer(fromCache + 9);
long myInvalidValue = casValue.getCas() - 1;
CASResponse response = client.cas(key, myInvalidValue, nextSeq);
Assert.assertEquals(CASResponse.EXISTS, response);
}
@测试
public void testCASFailsWrite()引发异常{
整数开始=新整数(3);
client.set(key,0,begin);
CASValue CASValue=client.get(键);
Assert.assertNotNull(casValue);
Assert.assertTrue(casValue.getValue()instanceof Integer);
整数fromCache=(整数)casValue.getValue();
整数nextSeq=新整数(fromCache+9);
long myInvalidValue=casValue.getCas()-1;
CASResponse=client.cas(key,myInvalidValue,nextSeq);
Assert.assertEquals(CASResponse.EXISTS,response);
}
我希望CASResponse显示该值已经存在,因为我有一个无效的casValue,但是在最后一次断言时它返回为OK。我希望确保我的密钥句柄在多个JVM中同时更新。我的单元测试通过com.thimbleware.jmemcached.AbstractCache的实现使用嵌入式memcache进程。当我的密钥已经在memcache中,并且我没有相同的casValue(),我是否可以依赖CASResponse来显示存在?这可能是因为您正在对memcached的全新实例运行此测试。cas值在memcached实例中是全局的,第一个集合接收cas值1,第二个集合获取cas值2,依此类推。运行测试时,密钥的cas值为1。由于您的无效cas是通过减少此密钥的cas值生成的,因此您的无效cas值最终为0。在更新中指定cas值0意味着忽略cas,只进行更新。将myInvalidValue设置为像123456这样的随机数,这个问题就会消失。另一件有趣的事情是,如果您在上面两次运行测试,它将通过第二次测试。我更新了代码并将myInvalidValue设置为459,它仍然响应Ok。有趣的是,我看到casValue正在更新。似乎com.thimbleware.jmemcached.AbstractCache未启用cas支持。我将这个单元测试指向一个外部memcached服务器,它可以按预期工作。