【问题标题】:JCS - Dynamic update of cache from databaseJCS - 从数据库动态更新缓存
【发布时间】:2012-12-01 23:10:27
【问题描述】:

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

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

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

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

谢谢, 贾亚克里希纳

【问题讨论】:

    标签: caching synchronization refresh sync jcs


    【解决方案1】:

    难道不能简单地让 JVM1 先检查内存缓存,然后,如果内存缓存中不存在该项目,则检查数据库缓存吗?

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

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

    最后,您是否考虑过分布式缓存?这样 JVM1 和 2 共享同一个缓存,并且 JVM1 和 2 在将项目插入数据库时​​将它们写入此缓存。 (这种方式有点类似于在 JVM1 和 2 之间发送网络消息,但是分布式缓存系统会自己发送消息,所以你不需要编写任何新代码)

    【讨论】:

    • 感谢您的回答。事实上,我查看了触发器部分,我们想要做的就是不应该有任何数据库交互,因为它不会随着 UI 事务的数量(db更新)在 JVM1 上。但是,我们尝试了一些不同的方法,即创建一个 Java 存储过程以及触发器,以便这个 Java 存储过程将控制(添加/删除条目)JVM2 上的缓存。
    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多