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

时间:2015-11-11 12:22:22

标签: java redis spring-data spring-data-redis

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

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

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

默认的java序列化程序无法序列化可选项,我还没想出如何告诉JsonSerializer处理Optional。这怎么样?摆脱Optional对我来说听起来不是一个选择。

1 个答案:

答案 0 :(得分:2)

简而言之:

没有开箱即用的支持。

说明

Spring Cache(spring-context的一部分)本身存储@Cacheable方法返回的值。使用内存缓存(如HashMap,Guava或EhCache(无复制)时,此方法可以正常工作。没有进一步拆箱。 Optional在缓存中可以有不同的语义。 Optional.isPresent() == false可能意味着该值不在缓存中,或者可能意味着根本没有可用值。

但有两种选择:

  1. 创建一个自己的序列化程序(基于JDK序列化程序),对Optional<T>
  2. 实施特殊处理
  3. 根据CacheInterceptor创建自己的CacheAspectSupport,但是您需要调整代理连接,很可能需要禁用默认CacheInterceptor
  4. HTH,马克