当前位置: 首页 > 知识库问答 >
问题:

使用绝地时如何检测Watch/Exec故障?

韦安顺
2023-03-14
WATCH somekey
MULTI
...
SET somekey somevalue
EXEC

我通过redistemplate(伪代码)的execute(SessionCallback)方法来实现:

l = template.execute({
  ops.watch("somekey");
  ops.multi()
  ops.opsForValue().set("somekey", "somevalue")
  return ops.exec()
})

我的问题是,当使用jedis时,l不是null而是一个空列表,因此exec失败与exec成功是无法区分的,因为multi内部没有返回结果的操作。

这里的单元测试似乎证实了这一点:https://github.com/spring-projects/spring-data-redis/blob/1.8.4.release/src/test/java/org/springframework/data/redis/core/redistemplateTests.java#l740测试失败的地方:

if (redisTemplate.getConnectionFactory() instanceof JedisConnectionFactory) {
    assertThat(results, is(empty()));
} else {
    assertNull(results);
}

与下面的TestunWatch测试相比较,该测试在取消监视后测试成功执行,并且需要一个空列表(Results.isEmpty())。

我在使用绝地武士的时候如何区分这两种情况呢?

共有1个答案

韦安怡
2023-03-14

使用Jedis无法检测事务回滚。

在任何情况下,Jedis都会返回当前可用版本(2.8.2、2.9.0)中的list对象。此更改是代码清理的一部分,以防止Jedis在回滚Redis事务时在exec(…)上返回null

现在,绝地武士回滚了改变,但绝地武士没有发布大约一年了。

 类似资料:
  • 我是vuforia的新手,我正在做一个基于增强现实的项目。我想检测地板作为我的项目的一部分。

  • 我有一个只有一个分区的Kafka主题。 在任何时间点,都可以有多个kafka客户端。所有客户端都使用相同的消费者组订阅。因此,在任何给定的时间点,只有1个客户端将接收消息。假设从t0到t10,consumer1正在接收消息,但一段时间后,它停止接收消息,consuper2被选为新的领导者(可能是因为consumer2中的GC暂停)。在我的consumer1中,我希望检测故障转移发生的时间,以便它可

  • 我正在为HS的最后一年项目开发一个平台游戏。然而…我使用的冲突检测系统基本上是关于检查阉羊角色的特定部分是否与另一个块相交。 碰撞似乎工作得很好,除了它会导致一些错误,例如玩家在从侧面撞击时卡住或减速,或者在上边和下边都被抛起时被抛起 我的问题是;我如何改进碰撞代码,以避免这种小故障,并有一种'滑'碰撞? 这是边界的预览 以下是绑定方法: 编辑:Im使用恒定的加速度来设置速度

  • 我想用docx4j库解析一个docx文件。 我需要检测org.docx4j.wml.instrText对象,但实际上它返回org.docx4j.wml.Text而不是org.docx4j.wml.instrText. 我在这里找到了一个与此库的旧版本一起使用的解决方案: http://www . docx 4 Java . org/forums/docx-Java-F6/can-I-just-t-

  • 问题内容: 我需要根据他们的IP或http标头了解用户当前所在的时区。 关于这个问题,我有很多答案,但是我听不懂那些答案。有人说使用。但是这是什么意思? 我的(index.php)页面的根目录中有一个。因此,为此,我必须动态获取时区并将其设置为。 问题答案: 总结一下Matt Johnson在代码方面的答案:

  • 本文向大家介绍使用jQuery mobile库检测url绝对地址和相对地址的方法,包括了使用jQuery mobile库检测url绝对地址和相对地址的方法的使用技巧和注意事项,需要的朋友参考一下 path.isAbsoluteUrl() 检测绝对网址 如果一个URL是绝对的实用方法。如果URL是绝对的这个函数返回一个布尔值 true ,否则返回 false。   path.isRelativeUr