作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
您好,我想使用 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
可能意味着该值不在缓存中,也可能意味着根本没有可用的值。
但是有两种选择:
Optional<T>
进行特殊处理。 CacheInterceptor
基于 CacheAspectSupport
但是随后您需要调整代理连接并且很可能需要禁用默认的 CacheInterceptor
HTH,马克
关于java - RedisSerializer 处理 java.util.Optional (Spring Data Redis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650458/
您好,我想使用 Redis 作为缓存提供程序,但不幸的是,redis 序列化程序(Json、String)不支持 java.util.Optional 我认为一些代码行可以更好地解释它: @Cache
我是一名优秀的程序员,十分优秀!