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

问题描述 投票:1回答:2

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

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

例如HashOperationget()方法将在nullmulti()之间调用时返回exec()。 但如果把get()放在multi()之前,它就能获得价值。

那么,为什么呢?

java spring redis spring-data-redis
2个回答
0
投票

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

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

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


建议:

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.