2012-06-26 17 views
1

我正在开发ibm websphere commerce(wcs)。在这个框架中,我们可以选择缓存我们的命令类,基本上它们只是一个Java类。虽然有一个新的缓存条目,但我知道这些java类必须是可序列化的(实现java.io.Serializable接口)。这是为什么?如何序列化被认为是缓存java/command类?

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

在此先感谢,桑托斯

回答

3

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

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

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

以下是来自ehcache documentation的一段文字,更详细地解释了溢出情况。

当一个元素被添加到高速缓存和它超越了它的最大 存储器大小,一个现有的元件或者删除,如果overflowToDisk 是假的,或评估用于缠绕到磁盘,如果overflowToDisk是 真。

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

+0

感谢您的回复。你能解释你答案中的第二点吗?我不明白如何借助序列化来控制数据溢出? –

+0

已更新我的回答 – gkamal

+0

再次感谢您的宝贵回复。 :) –

0

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

0

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