数据库支持的缓存的Java解决方案

时间:2016-07-19 22:53:10

标签: java database caching

我搜索了一个使用数据库作为存储的缓存解决方案,但只提出了查询缓存。是否有任何解决方案实际使用数据库作为缓存数据的存储机制?

为了给出一些观点,我的问题如下:我正在使用一个Web服务资源,这可能比查询我的数据库要耗费时间。因此,我想在我的数据库中缓存我的Web服务请求的结果。

我意识到我可以手工完成这项工作,但我必须有一些现有的解决方案,我至少可以调查它是否对我的目的有用。

更多信息:我当前的项目库由Java EE 7和Hibernate组成。

我希望EHCache能为我提供一些东西,但它似乎只提供内存或基于文件的解决方案。此特定缓存的内存占用量太大。此外,这将在集群环境中运行,因此基于文件的解决方案会导致同步问题。

2 个答案:

答案 0 :(得分:0)

RedHat的Infinispan有几种不同的基于JDBC的存储实现,可以满足您的要求。请看一下:http://infinispan.org/docs/stable/user_guide/user_guide.html#jdbc_based_cache_loaders(免责声明:我没有使用它的经验,所以我不能说它运行的稳定性或设置的复杂程度)。

通常使用数据库进行缓存持久性有Pro和Con参数。 Pro论证是,您可能更容易部署和资源管理,因为数据库已经到位。

Con论证是,使用数据库意味着对系统造成额外的压力。对于缓存更新,您将有大量数据库事务迫使磁盘同步,并且CPU等待IO完成。对于缓存,您不需要这种行为,因为数据存储本质上是临时的。

答案 1 :(得分:0)

对于这些问题,我通常建议使用基于Queue的解决方案。这些解决方案允许您将客户端(您的应用程序)和服务器(Web服务端点)分离,以便您可以执行以下非阻塞模式:

  • 不要阻止客户端
  • 到达时对接收的数据执行操作
  • 如果需要,可以将收到的数据保存到数据库中

我建议您使用ActiveMQ实现Queue功能,使用Apache Camel来管理服务调用/转换/持久性。