0

我正在研究节点之间的缓存复制解决方案

节点 A - 主节点 => Hibernate + 数据库 + Ehcache 作为二级缓存
Node B - 区域节点=> Ehcache 作为主缓存。no Hibernate

Node B 仅用作查询的附近缓存。

现在我正在更新节点 A 中的数据(比如 SudentInfo),它会被正确地持久化和缓存。在复制端(我使用 JMS)它向节点 B 发送一条消息。但问题是,它发送的消息是实例 CacheEntry(deep Inside Element),没有办法恢复原始对象(StudentInfo)。我在节点 B 中得到的是具有一些学生属性的 CacheEntry,但实际上不是学生对象。

请注意,我不需要节点 B 中的休眠会话/持久性,节点 B 仅用于快速查询,持久性是通过节点 A 完成的。那么有人尝试过这样的解决方案吗?有没有办法将 CacheEntry 转换为实际对象?或告诉 ehcache 复制原始对象而不是 CacheEntry。

谢谢您的帮助

4

1 回答 1

0

“Ehcache 作为二级缓存”是什么意思?作为二级缓存

因为如果是这样的话,那么被复制的对象就不是对象,而是 Hibernate 用来存储对象的数据,它本质上等同于存储在数据库中的行级数据。

看看这篇文章,它解释了二级缓存中的内容: 真正了解Hibernate二级缓存和查询缓存

我对你的问题是——为什么配置节点 B 与数据库通信——那么你就有了一个同构的设置。如果缓存碰巧起作用了——那么很好,你得到缓存的值并且不命中数据库——如果没有,你就命中了数据库。

除非有一些拓扑原因你不能这样做——在我看来,用相同的配置/设置运行两个节点会容易得多。

于 2010-03-19T00:05:38.127 回答