JCS - 从数据库动态更新缓存

时间:2012-12-13 23:30:10

标签: caching synchronization refresh sync jcs

我维护一个利用JCS在JVM中保存缓存的应用程序( JVM1 )。当JVM启动/重新启动时,这些数据将首次从数据库加载。

但是,数据库将从不同的JVM( JVM2 )访问,并有助于向数据库添加数据。

为了确保将这些额外/新添加的记录加载到缓存中,我们需要为数据库中的每次添加重新启动 JVM1

我们是否有办法在 JVM1 中定期刷新/加载缓存(仅适用于新添加的记录)(而不是频繁的数据库轮询)?

谢谢, Jaya Krishna

1 个答案:

答案 0 :(得分:0)

你能不能让JVM1首先检查内存缓存,然后,如果内存缓存中没有该项,请检查数据库缓存?

但是,如果您需要列出某些特定类型的所有项目,并且不想访问数据库。然后,为了让JVM1知道数据库中有一个新项,我想1)JVM2必须向JVM1发送网络消息,告诉它数据库中有新条目。或者2)可能存在插入新数据时触发的数据库触发器,并向JVM1发送网络消息。 (但是,让数据库向应用服务器发送网络消息感觉相当奇怪。) - 我认为这些方法看起来相当复杂。

您是否考虑过某种new-item-id表,它记录了最近插入数据库的项目的ID?它可以通过数据库触发器更新,或者在写入数据库时​​由JVM1和2更新。然后JVM1只需要每秒轮询一次这个表,以获取新ID列表,然后它就可以从数据库中加载新项。

最后,您考虑过分布式缓存了吗?这样JVM1和2共享相同的缓存,JVM1和2在将项目插入数据库时​​将项目写入此缓存。 (这种方法有点类似于在JVM1和2之间发送网络消息,但分布式缓存系统会自己发送消息,因此您不需要编写任何新代码)