减少java中的文件缓存

时间:2014-09-29 11:35:01

标签: java tomcat file-io hash bufferedreader

我正在使用tomcat服务器编写用java编写的Web服务(Web项目)。我已经写了一些用于阅读文件内容的代码。创建此文件的哈希值。该文件每天都在更新,我希望每天都更新哈希值。但是直到我通过tomcat服务器显式重新加载Web服务才会发生这种情况。

有没有办法减少哈希的缓存时间,或者是否应该新建哈希而不管外部重载命令?

我正在阅读文件:

static Map<String, Object> mcatFullDataHash;
BufferedReader br = new BufferedReader(new FileReader("mcat_group.tsv"));
while ((line = br.readLine()) != null)
{
    HashMap<String, Object> mcatInfo = new HashMap<String, Object>();
    line_elements = line.split("\\t");
    mcatInfo.put("groupid",line_elements[2]);
    mcatInfo.put("catid",line_elements[1]);
    mcatInfo.put("no_to_show_mcat", line_elements[4]);
    mcatFullData.put(line_elements[0],mcatInfo);
}

mcatFullDataHash是我正在阅读内容的哈希。

2 个答案:

答案 0 :(得分:0)

您需要启动一个后台线程,该线程会不时地检查文件日期,并触发重新加载。

另一个选择是使用像Guava这样的库,其cache implementation最终会忘记&#34;关于缓存中的项目。

注意:Guava缓存需要您可以单独加载缓存中的每个元素。在您的情况下,您想要清除整个缓存。一种简单的方法是将mcatFullDataHash保存为Guava缓存中的单个项目。这样,您可以在load()的{​​{1}}方法中创建内部缓存,并配置Guava缓存以在24小时后逐出该元素。

答案 1 :(得分:0)

只需将文件修改时间与缓存一起保存,并在每次进入缓存时进行检查。如果它已过期,请重新加载。