这个错误在我将spring data redis从1.4.2升级到1.5.2之后出现。
我的代码是实现悲观锁,

redisTemplate.execute(new RedisCallback<Boolean>() {
                @Override
                public Boolean doInRedis(RedisConnection connection)
                        throws DataAccessException {
Boolean nx = connection.setNX(lockKey.getBytes(), identifier.getBytes());
return nx;
}};

选中所有字段不为空。setnx方法总是返回空值。它应该返回布尔值true或false。
如有任何帮助,我们将不胜感激。
更新:
上面的代码片段嵌套在另一个redis事务中。它以前在SpringDataRedis1.4.2下工作。为了修复ERR EXEC without MULTI - spring redis+jedis中报告的“err exec without multi”,我将lib升级到1.5.2,问题突然出现。
为了解决这个问题,我首先尝试为嵌套回调方法分配一个不同的redistemplate(prototype bean),但是没有成功。工作方案是将单个事务分解成4个“测试是否需要锁”、“获取锁”、“做生意”、“释放锁”。

最佳答案

这个问题似乎是由嵌套redis事务引起的。嵌套SessionCallback即使使用不同的redistemplate(不同的数据库连接),也会使嵌套事务失败。工作解决方案是将4个事务展平,“测试是否需要锁”、“获取锁”、“做生意”、“释放锁”。

09-28 07:40