如何在内存中保存java列表与数据库中的表同步?

时间:2017-02-06 12:35:54

标签: java mysql database hibernate architecture

我想在列表中搜索输入。该列表驻留在数据库中。我看到了两个选项 -

  1. 点击每次搜索的数据库并返回结果。
  2. 将一份副本保存在与表同步的内存中并在内存中搜索并返回结果。
  3. 我喜欢第二个选项,因为它会更快。但是我对如何使列表与表同步感到困惑。

    示例:我有一个列表L = [12,11,14,42,56]
    我收到了一个输入:14

    如果输入确实存在于列表中,我需要返回结果。该列表可以由其他应用程序更新。我需要让列表与表同步。

    这里最优化的方法是什么以及如何使列表与数据库保持同步?

    我的应用程序是否有任何方式可以通知表中的更改,以便我可以按需重新加载列表。

2 个答案:

答案 0 :(得分:0)

我不会重新创建自己已经存在的东西的实现,而是利用Hibernate的二级缓存(2LC)和EhCache等实现。

通过使用2LC,您可以指定实体的生存时间到期时间,一旦它们到期,任何查询都会从数据库重新加载它们。如果实体缓存尚未到期,Hibernate将从2LC应用程序缓存而不是数据库中保存它们。

如果您使用的是Spring,可能还需要查看@Cachable。它在组件/ bean层运行,允许Spring将结果集缓存到命名区域。有关详细信息,请参阅其文档。

答案 1 :(得分:0)

为了满足您的要求,您应该在一个地方控制读写,否则,数据总会有一些不同步的情况。