可序列化如何与缓存 java/command 类相关?

San*_*nal 1 java serialization caching websphere-commerce

我在 ibm websphere commerce (wcs) 上工作。在这个框架中,我们有一个选项来缓存我们的命令类,基本上它们只是一个 java 类。在有一个新的缓存条目时,我知道这些 java 类必须是可序列化的(实现 java.io.Serializable 接口)。这是为什么?

是不是缓存基本上是保存一些执行的输出?在这种情况下,它将保存作为序列化一部分生成的字节序列,并且每当对该缓存对象的请求到来时,它只会反序列化并返回对象而不执行实际程序?任何人都可以分享这方面的知识吗??

提前致谢,桑托什

gka*_*mal 5

对于缓存方法执行的结果并为后续调用返回它,不需要序列化。

它需要可序列化的最可能原因是,当您在集群环境中缓存某些数据时,对一个节点上的缓存数据所做的更改将必须复制到集群的其他节点上。为了进行这种复制,需要使用一些远程处理 API 将数据序列化并发送到另一个节点。

要求类可序列化的另一个原因是缓存实现可能会将数据溢出到磁盘。即使在这种情况下,缓存中的对象也需要转换为可以存储在磁盘上并重新创建的某种形式。

以下是ehcache 文档中的一段,更详细地解释了溢出场景。

当一个元素被添加到缓存并且超出了它的最大内存大小时,现有元素要么被删除(如果 overflowToDisk 为假),要么被评估为假脱机到磁盘(如果 overflowToDisk 为真)。

在后一种情况下,将执行到期检查。如果过期则删除;如果不是,它被假脱机。从内存存储中驱逐项目基于配置文件中指定的“MemoryStoreEvictionPolicy”设置。