【问题标题】:Pessimistic lock implemented with spring data redis, setNX method returns null用spring data redis实现悲观锁,setNX方法返回null
【发布时间】:2015-11-28 15:07:46
【问题描述】:

我将 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。

感谢任何帮助。

更新

上面的代码 sn-p 嵌套在另一个 SessionCallback Redis 事务中。它曾经在 spring-data-redis 1.4.2 下工作。为了修复ERR EXEC without MULTI - spring redis+jedis 报告的“ERR EXEC without MULTI”,我将 lib 升级到 1.5.2,问题突然出现了。

为了解决这个问题,我首先尝试为嵌套回调方法分配不同的 redisTemplate(原型 bean),但没有成功。 可行的解决方案是将单个事务分解并扁平化为4个,“测试是否需要锁”,“获取锁”,“做生意”,“释放锁”。

【问题讨论】:

  • 问题已解决。
  • 请添加一个答案,最好使用您用来修复它的代码

标签: spring redis


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2019-10-28
    • 2014-08-30
    • 1970-01-01
    • 2018-10-22
    • 2017-03-25
    • 1970-01-01
    相关资源
    最近更新 更多