如何解决ReactiveRedisTemplate opsForHash放置不会覆盖该值
放入的ReactiveRedisTemplate opsForHash不会覆盖该值。
redisTemplate.opsForHash().put("NAMESPACE",id,personInfo.toByteArray()).
map(resBoolean -> {
return resBoolean;
}).onErrorResume(e -> {
return Mono.just(false);
});
仅当我首次使用新键调用上述方法时,该值才存储在Redis中。当我第二次调用具有相同值或不同值的相同方法时,我会得到错误的返回。
redis放置不覆盖相同密钥的值吗?是因为为键存储的每个值都是不可变的吗?
如果删除缓存值,则可以再次设置该值,这很明显。请帮忙回答。
解决方法
不幸的是,ReactiveRedisTemplate的文档没有描述返回的Boolean
字段的含义。
我们可以依靠official Redis documentation:
返回值整数回复:
添加的字段数。
很可能ReactiveRedisTemplate将正整数转换为true,将0转换为false。因此,返回的false值只是意味着该字段不会被新添加,而只是被覆盖,因此您的代码可能工作正常。
在try.redis.io上尝试以下示例,以查看实际效果:
> HSET myhash field1 "Hello"
(integer) 1
> HSET myhash field1 "Hello2"
(integer) 0
> HGET myhash field1
"Hello2"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。