我维护一个利用JCS在JVM中保存缓存的应用程序( JVM1 )。当JVM启动/重新启动时,这些数据将首次从数据库加载。
但是,数据库将从不同的JVM( JVM2 )访问,并有助于向数据库添加数据。
为了确保将这些额外/新添加的记录加载到缓存中,我们需要为数据库中的每次添加重新启动 JVM1 。
我们是否有办法在 JVM1 中定期刷新/加载缓存(仅适用于新添加的记录)(而不是频繁的数据库轮询)?
谢谢, Jaya Krishna
答案 0 :(得分:0)
你能不能让JVM1首先检查内存缓存,然后,如果内存缓存中没有该项,请检查数据库缓存?
但是,如果您需要列出某些特定类型的所有项目,并且不想访问数据库。然后,为了让JVM1知道数据库中有一个新项,我想1)JVM2必须向JVM1发送网络消息,告诉它数据库中有新条目。或者2)可能存在插入新数据时触发的数据库触发器,并向JVM1发送网络消息。 (但是,让数据库向应用服务器发送网络消息感觉相当奇怪。) - 我认为这些方法看起来相当复杂。
您是否考虑过某种new-item-id表,它记录了最近插入数据库的项目的ID?它可以通过数据库触发器更新,或者在写入数据库时由JVM1和2更新。然后JVM1只需要每秒轮询一次这个表,以获取新ID列表,然后它就可以从数据库中加载新项。
最后,您考虑过分布式缓存了吗?这样JVM1和2共享相同的缓存,JVM1和2在将项目插入数据库时将项目写入此缓存。 (这种方法有点类似于在JVM1和2之间发送网络消息,但分布式缓存系统会自己发送消息,因此您不需要编写任何新代码)