我将加密密钥存储在Redis数据库中。我想实现一个回退机制来生成密钥,除非它们已经存在。我提出的解决方案让我感到困惑的是,我在一个Redis上下文中调用subscribe
。我的IDE指出了这个问题。那么问题是如何实现这个回退?
public Mono<String> getEncryptionKey(String entity) {
return reactiveRedisOperations.opsForValue()
.get("private")
.switchIfEmpty(
Mono.create(stringMonoSink -> {
try {
var privateKeyEncoded = ...
var publicKeyEncoded = ...
reactiveRedisOperations.opsForValue()
.multiSet(Map.of(
"private", privateKeyEncoded,
"public", publicKeyEncoded
))
.subscribe(success -> {
stringMonoSink.success(privateKeyEncoded);
});
} catch (Throwable e) {
stringMonoSink.error(e);
}
})
);
}
字符串
1条答案
按热度按时间dvtswwa31#
您可以使用
Mono.defer(Supplier<? extends Mono<? extends T>> supplier)
。它需要Mono的供应商,只有在Mono订阅时才会调用。在您的情况下,这意味着只有在switchIfEmpty
的情况下才会调用密钥生成:字符串