Web应用程序的特定缓存方案

时间:2014-05-24 15:25:49

标签: java sql sql-server caching

我正在制作一个网络应用程序,涉及能够从多个百货商店获取特定的计算机日志。该应用程序从SQL Server数据库获取数据。在应用程序开始时,我要求用户选择一个区域编号以缩小他们的选择范围。在选择区域后,我调用DB来检索该区域中的不同商店(我已经创建了一个Store类,因此我可以轻松创建对象)。我将它们显示给用户,以便他们可以选择他们想要的商店。在用户选择他们的商店之后,我必须再次调用DB来检索属于该商店的工作站列表(我再次定义了一个名为Workstation的类)。然后,用户可以选择工作站,选择他们想要日志的日期和月份,然后点击提交按钮。

当谈到缓存DB的结果时,我对如何执行此操作感到困惑。理想情况下,我会使用一些缓存管理器(如JCS或EHCACHE)缓存Store和Workstation对象。我获取存储的第一个SQL语句有一个WHERE子句,用于检查用户选择的REGION。因此,当我将这些结果返回到ResultSet对象中时,我是否逐个遍历它们并检查它们是否已经在缓存中?如果它们不在那里,则创建一个Store对象并添加它。如果对象已经在缓存中,那么使用continue语句跳转到ResultSet的下一次迭代?

你是否认为考虑缓存特定日期和月份所要求的日志信息是否明智?

我正在寻找关于如何继续这个项目的一些指导,如果有人可以帮助我或者给我一个普遍的步骤或者如何继续进行推荐,我将非常感激。编程本身不是问题。这只是我对缓存本身的不熟悉。

非常感谢!

1 个答案:

答案 0 :(得分:1)

  

然后,用户可以选择工作站,选择他们想要日志的日期和月份,然后点击提交按钮。

基于此声明,我假设特定日期和月份的日志在写入数据库后不会更新。

  

所以,当我在ResultSet对象中得到这些结果时,我是否逐个迭代它们并检查它们是否已经在缓存中?

看起来使用Hibernate和二级缓存,查询缓存对你来说是一个更好的选择,而不是只使用缓存。由于您的问题是一个高级问题,我不打算详细介绍什么是Hibernate以及如何使用Hibernate并配置二级缓存和查询缓存。

有关查询缓存的更多详细信息,请参阅this。这篇文章有点旧,但确实帮助我理解了查询缓存的基础知识。

  

您是否认为考虑缓存特定日期和月份的日志信息是否明智?

我认为缓存过去的数据没有任何问题。缓存数据的主要目的是在需要时快速提供应用程序所需的数据。如果访问此数据需要您在每次需要数据时访问数据库或从文件中读取数据,则缓存是有意义的。