gpt4 book ai didi

java - RedisSerializer 处理 java.util.Optional (Spring Data Redis)

转载 作者:IT王子 更新时间:2023-10-29 06:11:27 30 4
gpt4 key购买 nike

您好,我想使用 Redis 作为缓存提供程序,但不幸的是,redis 序列化程序(Json、String)不支持 java.util.Optional

我认为一些代码行可以更好地解释它:

@Cacheable("test)
public Optional<Account> getAccount(String accountId){
// ... call to some service or rest api
}

Optional 不能被默认的 java 序列化器序列化,我还没有想出如何告诉 JsonSerializer 来处理 Optional。这将如何运作?摆脱 Optional 对我来说听起来不像是一个选项。

最佳答案

简而言之:

没有开箱即用的支持。

解释

Spring Cache(属于 spring-context 的一部分)本地存储 @Cacheable 返回的值方法。这在使用像 HashMap 这样的内存缓存时效果很好、Guava 或 EhCache(无复制)。没有进一步的拆箱。 Optional在缓存中可以有不同的语义。 Optional.isPresent() == false可能意味着该值不在缓存中,也可能意味着根本没有可用的值。

但是有两种选择:

  1. 创建一个自己的序列化程序(基于 JDK 序列化程序),在其中对 Optional<T> 进行特殊处理。
  2. 创建您自己的 CacheInterceptor基于 CacheAspectSupport但是随后您需要调整代理连接并且很可能需要禁用默认的 CacheInterceptor

HTH,马克

关于java - RedisSerializer 处理 java.util.Optional (Spring Data Redis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650458/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com