重新序列化程序处理java.util.Optional(Spring数据Redis)
您好,我想使用Redis作为缓存提供程序,但不幸的是,Redis序列化程序(Json,字符串)不支持java.util.Optional 我认为一些代码行可以更好地解释它:重新序列化程序处理java.util.Optional(Spring数据Redis),java,redis,spring-data,spring-data-redis,Java,Redis,Spring Data,Spring Data Redis,您好,我想使用Redis作为缓存提供程序,但不幸的是,Redis序列化程序(Json,字符串)不支持java.util.Optional 我认为一些代码行可以更好地解释它: @Cacheable("test) public Optional<Account> getAccount(String accountId){ // ... call to some service or rest api } @Cacheable(“测试”) 公共可选getAccount(字符串acco
@Cacheable("test)
public Optional<Account> getAccount(String accountId){
// ... call to some service or rest api
}
@Cacheable(“测试”)
公共可选getAccount(字符串accountId){
//…调用某个服务或rest api
}
Optional无法由默认java序列化程序序列化,我还没有想出如何告诉JsonSerializer处理Optional。这将如何工作?摆脱Optional对我来说并不是一个真正的选项。简而言之:
没有现成的支持
解释
Spring Cache(它是Spring context
的一部分)以本机方式存储@Cacheable
方法返回的值。当使用诸如HashMap
、Guava或EhCache(无复制)之类的内存缓存时,这一功能可以正常工作。没有进一步的取消装箱。可选
可以在缓存中具有不同的语义。可选。isPresent()==false
可能表示值不在缓存中,也可能表示根本没有可用值
但是,有两种选择:
Optional
CacheAspectSupport
创建您自己的CacheInterceptor
,但是您需要调整代理连接,并且很可能需要禁用默认的CacheInterceptor
HTH,Mark您好,谢谢您的回复。非常不幸:)我正在考虑使用AspectJ this(将@Cacheable放在一个私有方法上,将结果包装成可选项),我认为这可能也是一个选项。@jeven我也按照您的建议做了。真糟糕!