5

我是一个构建 Java Web 应用程序的团队的一员,其中用户将在关系数据库中搜索结果,然后在浏览器中以表格方式查看它们。然后,用户还可以选择随后在单独的浏览器窗口中查看相同的结果集(或这些结果的子集),例如使用图表工具。换句话说,我们需要让用户能够在以后(最多 24 小时)可视化相同的结果集记录。

由于系统上的搜索会占用大量资源并且只是出于良好的常识,因此我们希望有一种干净的方式来缓存每个结果集,以便以后可以从内存(RAM 或磁盘)中提取它。 我们正在寻找一种做这种缓存的好方法,我们相信其他人之前已经这样做过,我们更喜欢使用最佳实践或框架,而不是从头开始构建这样的东西。服务器将有大量 RAM,但由于可能有数百人使用该系统,我们可能需要一种方法,先存储到 RAM,然后如果 RAM 已满,也可以缓存到硬盘。

我相信坚持作为 Java 对象是最有意义的,但我愿意接受更好的建议。我们想要一种供应商中立的方法,这样如果数据库团队选择稍后更换供应商,我们就不会被专有解决方案所束缚。谢谢。

4

3 回答 3

4

我认为您可能正在寻找的是 Terracotta Ehcache。这可以完成您提到的所有事情以及更多。它是一个免费产品,可用于在内存中缓存内容、溢出到磁盘、通过 MB 或项目数指定最大缓存大小,以及根据上次访问时间或进入时间过期。

于 2012-12-07T19:37:00.060 回答
1

我已经看到http://www.jboss.org/infinispan/曾经这样做过。它可以缓存到内存、磁盘和/或数据库。我不会说我喜欢它(配置不是超级简单,文档也有些缺乏),但它肯定可以工作并且得到积极维护。

于 2012-12-07T19:34:43.387 回答
1

保持供应商中立就是编写一个应用程序原生的抽象层,然后在该层后面插入您想使用的缓存服务,同时保持将这些操作暴露给主代码的层相同。

有很多方法可以缓存。研究使用各种 NoSql 解决方案。

大多数时候,您将序列化您的对象并将其持久化到您的缓存层。

于 2012-12-07T19:35:39.610 回答