缓存不可序列化的对象
问题描述:
我试图实现具有预取功能的缓存。缓存不可序列化的对象
该计划是,如果缓存条目是新的,那么它将按原样返回。 如果缓存的年龄超过设定的年龄,则会在新的线程被刷新以刷新条目时返回“旧”缓存。 如果它比它更老,它将更新条目并返回它。
这样做的计划是为了避免在用户需要等待缓存刷新时发生缓存未命中。
我有一种使用hashmap作为缓存存储的工作模式,但这看起来很脏。
所以我想用这个javax.cache.cache-api
包,我选择org.infinispan.infinispan.jcache
作为实现。 问题是,我想保存在缓存中的对象是不可序列化的,我不知道如何让inifinispan允许它们。
他们为什么不可序列化的原因是因为他们存储函数以更新缓存条目。
问题是: 你可以使用infinispan存储不可序列化的对象吗?如果是这样,如何?
或者是否有任何开箱即用的解决方案已经完成了我的工作?
答
Infinispan不要求您的值为Serializable
。
这只是群集缓存所需要的,但对于您的用例看起来像一个合理的本地缓存可能更适合。
显然,如果您需要缓存来跨服务器和/或数据中心复制数据,那么Infinispan将需要一些方法来通过电线来整理对象。如果您也想使用这些功能,则可以为您的类型插入自定义Externalizer
实现。
即使对于可序列化类型,插入自定义外部实现程序实现可能也是一个好主意,因为自定义外部化程序框架通常会比Java标准序列化执行得更好。
不知道这个包,你可能会尝试创建一个实现包含实际对象的'Serializable'的包装器对象。这显然不会工作,如果实际的序列化发生,但应该只发生(至少在我的眼中),如果我们谈论的是由多个实例共享的缓存(如果这是这个包的东西) – Lothar
我以为是一样的,但它似乎仍然有问题。而且我已经有一个包含实际缓存值的包装器,它也存储更新函数。我试图实现'Serializable',但没有运气。 (并且没有,它不被多个实例共享) – munHunger