将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方法始终返回null。它应该返回布尔值true或false。
感谢任何帮助。
更新:
上面的代码段嵌套在另一个SessionCallback
Redis事务中。它曾经在spring-data-redis 1.4.2下工作。为了修复ERR EXEC without MULTI - spring redis+jedis报告的“没有MULTI的ERR EXEC”,我将lib升级到1.5.2,问题突然出现了。
为了解决这个问题,我首先尝试为嵌套的回调方法分配一个不同的redisTemplate(原型bean),但它没有用。 工作解决方案是将单个事务分解并展平为4,“测试是否需要锁定”,“获取锁定”,“执行业务”,“释放锁定”。
答案 0 :(得分:0)
看来问题是由嵌套Redis事务引起的。即使使用不同的redisTemplate(不同的数据库连接)嵌套SessionCallback
也无法嵌套事务。工作解决方案是扁平化为4个交易,&#34;测试是否需要锁定&#34;,&#34;获取锁定&#34;,&#34;做生意&#34;,&#34;释放锁定& #34 ;.