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

ERR EXEC不带多个spring Redis+Jedis

夏元明
2023-03-14

我在使用spring-data-redis事务操作期间遇到了异常

RedisTemplate<String,Object> cartCache;

public void create(final Cartline cartline) {
  Object txResults = cartCache.execute(new SessionCallback<List>() {
    public List execute(RedisOperations operations) throws DataAccessException {
      String cartId = cartline.getMemberId();
      String cartlineId = cartline.getCartlineId();
      operations.multi();    
      ......           
      return operations.exec();
    }
  });
}

redis.clients.jedis.exceptions.JedisDataException: ERR EXEC without MULTI
    at redis.clients.jedis.Protocol.processError(Protocol.java:115)
    at redis.clients.jedis.Protocol.process(Protocol.java:133)
    at redis.clients.jedis.Protocol.read(Protocol.java:202)
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:285)
    at redis.clients.jedis.Connection.getRawObjectMultiBulkReply(Connection.java:230)
    at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:236)
    at redis.clients.jedis.Transaction.exec(Transaction.java:38)
    at org.springframework.data.redis.connection.jedis.JedisConnection.exec(JedisConnection.java:738)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.springframework.data.redis.core.CloseSuppressingInvocationHandler.invoke(CloseSuppressingInvocationHandler.java:57)
    at com.sun.proxy.$Proxy512.exec(Unknown Source)
    at org.springframework.data.redis.core.RedisTemplate$3.doInRedis(RedisTemplate.java:593)
    at org.springframework.data.redis.core.RedisTemplate$3.doInRedis(RedisTemplate.java:591)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:190)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:140)
    at org.springframework.data.redis.core.RedisTemplate.execRaw(RedisTemplate.java:591)
    at org.springframework.data.redis.core.RedisTemplate.exec(RedisTemplate.java:578)
    at com.znova.stone.cart.repository.impl.CartCacheImpl$1.execute(CartCacheImpl.java:51)
    at com.znova.stone.cart.repository.impl.CartCacheImpl$1.execute(CartCacheImpl.java:1)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:217)

我阅读了这篇ERR EXEC with multi-jedis的文章,它指示了带有EXEC的MULTI,我还启用了Redistemplate.SetEnableTransactionSupport(true);,错误保持不变。

我移除了多执行块中的操作逻辑,我发现没有任何区别,异常发生事件与零操作块。

共有1个答案

苍温文
2023-03-14

我也遇到了同样的问题,并通过将spring-data-redis从1.4.2.release更新到1.5.2.release来修复它。

 类似资料:
  • 问题内容: 我对CSS选择器有点困惑,我知道如果它们共享相似的属性,我们可以用逗号将多个css选择器分组,但是没有逗号的多个css选择器呢?例如: 问题答案: 当您使用逗号时,例如 你是说: id为menu的所有元素以及class为item的所有元素 当您将选择器嵌套而不使用逗号时,例如 你是说 在ID为menu的容器中具有class item的所有元素

  • 问题内容: 我想知道是否可以使用以不同输入参数开头的相同脚本创建服务。如: 可能吗?那么它将启动为串行模式吗?还是分成两个不同的过程?最好的祝福 问题答案: 如果在你的单位的文件,你只能指定一个ExecStart,但您可以添加尽可能多的,但这些都不是适合长期运行的命令,因为它们是串行执行,一切都开始一个开始下一个杀害前。 如果可以指定多个ExecStart,则它们将以串行方式而不是并行运行。 如果

  • 问题内容: 我需要构建一个具有多个窗口的应用程序。在其中一个窗口中,我需要能够玩一个简单的游戏,而另一个窗口必须显示问题并获得影响游戏的用户的响应。 (1)我想使用pygame来制作游戏。有一种 简单的 方法可以让pygame在多个窗口中运行吗? (2)如果没有简单的方法可以解决(1),是否有一种简单的方法来使用其他一些Python GUI结构,从而允许我同时运行pygame和另一个窗口? 问题答

  • 在某些用例中,我希望急切地获取一对多的-s(但并非总是如此,因此将不太好),我还希望JPA使用单独的SQL选择来获取那些-s(每个一个选择,而不是每个项一个选择),而不是SQL连接。这是因为笛卡尔积(我有两个独立的列表)。 您可能认为我可以使用JPA2.1实体图(毕竟这就是它的用途,以一种特殊的方式将属性标记为急切的),或者使用JPQL(或使用criteria API)不太优雅地。但它们似乎坚持使

  • 我是Node.js和Express的新手,我一直在做一个RESTful API项目,我试图在URL中发送一个带有多个参数的GET请求: 这是我的路线: 我是这样称呼它的: 而且我也尝试过 它最终会走这条路线: 那么,我写endpoint的方式是否错误?还是我要求的方式?

  • 我现在一筹莫展。 请求代码收集在一个ArrayList中,这样当程序退出时,另一个函数可以清除所有警报。 现在的问题是:我的警报器打不响。我能够找到这个函数的错误。AlarmManager实例很好。我在底部设置了一个测试警报(在带有星号的行之后)。着火了。为什么???