使用redis(4.0)和spring-data-redis处理项目时。
在一个事务中,在java程序中,get操作似乎会返回null。
例如,HashOperation的get()方法在multi()和exec()之间调用时将返回null。
但是如果将get()放在multi()之前,它可以获得值。
那么,为什么呢?
发布于 2017-12-08 21:29:36
经过测试和思考,我认为这是合理的行为,因为事务在redis中作为原子操作执行,不可能在事务中间通过网络将值返回给客户端,因此null是合理的。
在执行事务之后,所有值都由exec()方法以List的形式返回。
因此,在调试时,在事务中间,该值应该为null,因为它还没有执行。
建议:
如果事务中的计算需要从redis中读取值,那么只需在multi()之前先读取这些值。
然后在multi()和exec()之间只执行更新操作,而不执行读取操作。
发布于 2017-12-22 09:55:41
在文档中,它说“所有的只读操作,比如键,都通过管道传递到一个新的(非线程绑定的) RedisConnection”。有一次,我认为它会返回旧值,因为读取发生在不同的新连接中。最近似乎行为发生了变化,因为现在我看到一个事务中所有读取的空值。spring-data-redis团队的人能清楚地说明预期的行为吗?
https://stackoverflow.com/questions/47707628
复制相似问题