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"

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...