我正在从事ibm websphere commerce (wcs)的工作。在这个框架中,我们可以选择缓存我们的命令类,基本上它们只是一个java类。虽然有了新的缓存条目,但我知道这些java类必须是可序列化的(实现java.io.Serializable接口)。为什么会这样呢?
这是不是就像缓存基本上是在保存某些执行的输出?在这种情况下,它将保存作为序列化的一部分生成的字节序列,并且每当对该缓存对象的请求到来时,它将只是反序列化并返回对象,而不执行实际的程序?有人能分享一下这方面的知识吗??
先谢谢你,桑托什
发布于 2012-06-27 21:40:37
对于缓存方法执行的结果并将其返回给后续调用,不需要序列化。
最有可能的原因是,当您在集群环境中缓存某些数据时,对一个节点上的缓存数据所做的更改必须复制到集群的其他节点上。为了执行此复制,需要使用某种远程api序列化数据并将其发送到另一个节点。
要求类可序列化的另一个原因是缓存实现可能会将数据溢出到磁盘。即使在这种情况下,缓存中的对象也需要转换为可以存储在磁盘上并重新创建的某种形式。
下面是来自ehcache documentation的一段话,更详细地解释了溢出场景。
当元素被添加到缓存并且超出了其最大内存大小时,如果overflowToDisk为false,则删除现有元素;或者,如果overflowToDisk为true,则评估是否要假脱机到磁盘。
在后一种情况下,将执行过期检查。如果它已过期,则将其删除;如果未过期,则将其假脱机。从内存存储中逐出项基于配置文件中指定的'MemoryStoreEvictionPolicy‘设置。
发布于 2012-06-27 21:37:02
序列化将实际对象本身保存在其当前状态。
发布于 2013-02-26 08:54:06
原因是WebSphere商务使用了WebSphere应用服务器的动态缓存功能。WAS dynacache是一个内存中的java缓存,非常类似于内置的memcached。开箱即用,starter store使用dynacache缓存JSP、servlet、控制器、命令、命令任务和其他java对象。在DB端也有缓存。这就是为什么在性能测试中,IBM在大容量时比其他软件具有更好的伸缩性。
https://stackoverflow.com/questions/11212642
复制相似问题