将 @Cacheable 注释与 Reactive 控制器方法一起使用

Using @Cacheable annotation with a Reactive controller method

我目前正在尝试使用 Redis 为 Sprint Boot 应用程序实施缓存:

@Cacheable(value = "products", key = "#id")
@GetMapping(value = "/product/{id}")
public Mono<Product> getProduct(@PathVariable("id") String sku) {
    ...
}

但是,我遇到了这个异常:

java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [reactor.core.publisher.MonoMapFuseable]

根据我的研究,这与尝试序列化 Mono return 类型有关,而不是 Product 本身。所以我的问题是,对于像这样的反应式方法,用 Redis 实现缓存机制的推荐方法是什么?非常感谢评论和反馈。

将 getProduct() 的 return 类型从 Mono 更改为 Product

由于您一次只获得一种产品,并且您使用的是 Mono<>,因为它最多发出一项,然后(可选)以 onComplete 信号或 onError 信号终止。

所以不要使用 Product 作为 return 类型并定义 if else 没有产品,即处于错误状态。

否则 通过这些链接了解使用 Redis

实现缓存机制的方法