问题描述
放入的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"