我正在尝试使用预取功能实现缓存。
计划是如果缓存条目是新的,那么它将按原样返回。 如果缓存早于设定的年龄,那么" old"生成新线程以刷新条目时将返回缓存。 如果它甚至比它更旧,它将更新条目然后返回它。
这样做的目的是避免在用户需要等待刷新缓存的地方出现缓存未命中。
我有一种使用hashmap作为缓存存储的工作模型,但这看起来很脏。
所以我想使用javax.cache.cache-api
包,我选择org.infinispan.infinispan.jcache
作为实现。
问题是我想要保存在缓存中的对象不可序列化,我无法弄清楚如何让inifinispan允许它们。
它们不可序列化的原因是因为它们存储了更新缓存条目的功能。
问题是: 你可以用infinispan存储像这样的非可序列化对象吗?如果存在,怎么做?
或者是否有任何开箱即用的解决方案已经完成了我的目标?
答案 0 :(得分:4)
Infinispan不要求您的值为Serializable
。
这仅适用于群集缓存,但对于您的用例看起来像一个合理的仅本地缓存可能更适合。
显然,如果您需要缓存来跨服务器和/或数据中心复制数据,那么Infinispan将需要一些方法来跨线连接您的对象。如果您也想使用这些功能,可以为您的类型插入自定义Externalizer
实现。
即使对于Serializable类型,插入自定义Externalizer实现也是一个好主意,因为自定义Externalizer框架通常比Java的标准序列化更好。
答案 1 :(得分:1)
从Infinispan 5.0开始,只要用户可以为这些非Seralizable对象提供有意义的Externalizer实现,就支持编组非Serializable键/值对象。这个section有更多细节。