这个错误在我将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个事务展平,“测试是否需要锁”、“获取锁”、“做生意”、“释放锁”。