【问题标题】:Reduce file cache in java减少java中的文件缓存
【发布时间】:2014-09-29 11:35:00
【问题描述】:

我正在使用 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 是我从中读取内容的哈希值。

【问题讨论】:

    标签: java tomcat file-io hash bufferedreader


    【解决方案1】:

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

    另一种选择是使用像 Guava 这样的库,它的 cache implementation 最终会“忘记”缓存中的项目。

    注意:Guava 缓存期望您可以单独加载缓存中的每个元素。在您的情况下,您想删除整个缓存。一种简单的方法是将mcatFullDataHash 作为单个项目保存在 Guava 缓存中。这样,您可以在CacheLoader()load() 方法中创建内部缓存,并配置 Guava 缓存以在 24 小时后驱逐元素。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        相关资源
        最近更新 更多