java - ReactiveRedisTemplate opsForHash put 不会覆盖值

标签 java redis reactive-programming spring-webflux spring-data-redis

ReactiveRedisTemplate opsForHash put 不会覆盖该值。

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 :

Return value Integer reply:

The number of fields that were added.


很可能 ReactiveRedisTemplate 将正整数转换为真,将 0 转换为假。所以返回的 false 值只是意味着该字段不是新添加的,只是被覆盖了,所以你的代码可能工作正常。
try.redis.io 上试试这个例子看看这个在行动:
> HSET myhash field1 "Hello"
(integer) 1
> HSET myhash field1 "Hello2"
(integer) 0
> HGET myhash field1
"Hello2"

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

相关文章:

docker - docker 在现有的 docker 容器上运行有什么作用?

caching - 带有过期条目的 Redis 列表?

haskell - 响应式(Reactive)香蕉:触发包含行为的最新值的事件

domain-driven-design - 域设计中的响应式(Reactive)编程

java - 在 hadoop : Type Mismatch 中链接作业

java - @OneToMany 关联加入错误的字段

Java 函数转换为 Kotlin 失败

java - 将 ORACLE 数据类型映射到 JAVA 数据类型

redis - celery 多个 worker ,但一个队列

reactive-programming - 使用 Mono 值并用它来调用另一个 Mono