您好我想使用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对我来说听起来不是一个选择。
答案 0 :(得分:2)
没有开箱即用的支持。
Spring Cache(spring-context
的一部分)本身存储@Cacheable
方法返回的值。使用内存缓存(如HashMap
,Guava或EhCache(无复制)时,此方法可以正常工作。没有进一步拆箱。 Optional
在缓存中可以有不同的语义。 Optional.isPresent() == false
可能意味着该值不在缓存中,或者可能意味着根本没有可用值。
但有两种选择:
Optional<T>
CacheInterceptor
创建自己的CacheAspectSupport
,但是您需要调整代理连接,很可能需要禁用默认CacheInterceptor
HTH,马克