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