您好,我想使用 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。这将如何运作?摆脱可选对我来说听起来并不是一个真正的选择。
最佳答案
简而言之:
没有开箱即用的支持。
说明
Spring Cache(属于 spring-context
的一部分)本地存储 @Cacheable
返回的值。方法。当使用像HashMap
这样的内存缓存时,这工作得很好。 、Guava 或 EhCache(无复制)。没有进一步的拆箱。 Optional
在缓存中可以有不同的语义。 Optional.isPresent() == false
可能意味着该值不在缓存中,也可能意味着根本没有可用的值。
但是有两种选择:
- 创建一个自己的序列化器(基于 JDK 序列化器),在其中对
Optional<T>
实现特殊处理 - 创建您自己的
CacheInterceptor
基于CacheAspectSupport
但随后您需要调整代理连接,并且很可能您需要禁用默认的CacheInterceptor
马克·HTH
关于java - RedisSerializer 处理 java.util.Optional (Spring Data Redis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650458/