繁体   English   中英

如何将serializable与缓存java /命令类相关联?

[英]how serializable is releated to caching a java/command class?

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

它是否像缓存基本上保存了一些执行的输出? 在这种情况下,它将保存作为序列化的一部分生成的字节序列,每当请求到该缓存对象时,它将只反序列化并返回对象而不执行实际程序? 谁能分享一下这方面的知识?

谢谢你,Santosh

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

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

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

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

当一个元素被添加到缓存并超出其最大内存大小时,如果overflowToDisk为false,则删除现有元素,或者如果overflowToDisk为true,则评估假脱机到磁盘。

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

序列化在当前状态下保存实际对象本身。

原因是WebSphere Commerce使用WebSphere Application Server的Dynacache功能。 WAS dynacache是​​一个内存中的java缓存,与内置的memcached非常相似。 开箱即用,原型商店使用dynacache来缓存JSP,servlet,控制器,命令,命令任务和其他java对象。 在DB端也有缓存。 这就是为什么在性能测试中,IBM比其他软件在高容量时更好地扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM