首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未返回的MemcachedClient cas操作已存在

未返回的MemcachedClient cas操作已存在
EN

Stack Overflow用户
提问于 2013-04-12 04:07:00
回答 1查看 430关注 0票数 1

我有下面的单元测试,它使用net.spy.memcached.MemcachedClient

代码语言:javascript
复制
    @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);
}

我希望CASResponse会显示该值已经存在,因为我有一个无效的casValue,但是在最后一次断言时,它返回为OK。我希望确保我的密钥句柄跨多个JVM并发更新。我的单元测试是通过com.thimbleware.jmemcached.AbstractCache实现使用嵌入式memcache进程。当我的键已经在memcache中,而我没有相同的casValue()时,我能依靠CASResponse来显示存在吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-13 08:25:47

这很可能是因为您正在对一个全新的memcached实例运行此测试。Cas值在memcached实例中是全局的,第一个集合接收cas值1,第二个集合获取cas值2,依此类推。当您运行测试时,您的键获得的CAS值为1。因为您的无效cas是通过递减此键的CAS值而生成的,所以您的无效CAS值最终为0。在更新中指定cas值为0意味着忽略cas而仅更新。将myInvalidValue设置为像123456这样的随机数,这个问题就会消失。另一件有趣的事情是,如果你在上面两次运行你的测试,那么第二次就会通过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15957901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档