使用redis
(4.0)和spring-data-redis
处理项目时。
似乎在事务中,get操作将在java程序中返回null。
例如,在HashOperation
和get()
之间调用null
' multi()
方法会返回exec()
。
但如果将get()
放在multi()
之前,则可以获得该值。
那么,为什么呢?
答案 0 :(得分:0)
经过测试&思考,我认为这是合理的行为,因为事务在redis中作为原子操作执行,在事务中间通过网络将值返回给客户端是不可能的,因此null
是合理的。
执行事务后,exec()
方法将所有值作为List
返回。
因此,在调试时,在事务中间,该值应为null,因为它尚未执行。
<强>建议:强>
如果事务中的计算需要从redis读取值,那么只需在multi()
之前读取这些值。
然后multi()
和exec()
之间只进行更新操作,但没有读取操作。
答案 1 :(得分:0)
在文档中,它说“所有只读操作,例如KEYS都通过管道连接到新的(非线程绑定)RedisConnection”。有一段时间,我认为它曾用于返回旧值,因为读取正在以不同的新连接发生。最近似乎行为发生了变化,因为现在我看到了事务中所有读取的空值。来自spring-data-redis团队的人员是否可以明确预期的行为。