ReactiveRedisTemplate opsForHash不会覆盖该值。

redisTemplate.opsForHash().put("NAMESPACE", id, personInfo.toByteArray()).
                    map(resBoolean -> {
                        return resBoolean;
                    }).onErrorResume(e -> {
                        return Mono.just(false);
                    });
仅当我第一次使用新键调用上述方法时,该值才存储在Redis中。当我第二次使用相同的值或不同的值调用相同的方法时,我得到了假。
redis put不会覆盖相同密钥的值吗?是否因为为键存储的每个值都是不可变的?
如果删除缓存值,则可以再次设置该值,这很明显。请帮助回答。

最佳答案

不幸的是,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"

关于java - ReactiveRedisTemplate opsForHash放置不会覆盖该值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63460208/

10-11 02:25