Spring-data-redis:在事务中,get操作将返回null

时间:2017-12-08 04:16:18

标签: java spring redis spring-data-redis

使用redis(4.0)和spring-data-redis处理项目时。

似乎在事务中,get操作将在java程序中返回null。

例如,在HashOperationget()之间调用null' multi()方法会返回exec()
但如果将get()放在multi()之前,则可以获得该值。

那么,为什么呢?

2 个答案:

答案 0 :(得分:0)

经过测试&思考,我认为这是合理的行为,因为事务在redis中作为原子操作执行,在事务中间通过网络将值返回给客户端是不可能的,因此null是合理的。

执行事务后,exec()方法将所有值作为List返回。

因此,在调试时,在事务中间,该值应为null,因为它尚未执行。

<强>建议:

如果事务中的计算需要从redis读取值,那么只需在multi()之前读取这些值。

然后multi()exec()之间只进行更新操作,但没有读取操作。

答案 1 :(得分:0)

在文档中,它说“所有只读操作,例如KEYS都通过管道连接到新的(非线程绑定)RedisConnection”。有一段时间,我认为它曾用于返回旧值,因为读取正在以不同的新连接发生。最近似乎行为发生了变化,因为现在我看到了事务中所有读取的空值。来自spring-data-redis团队的人员是否可以明确预期的行为。