我正在使用 tomcat 服务器开发一个用 java 编写的网络服务(网络项目)。我已经编写了一些代码来读取文件的内容并创建该文件的哈希值。该文件每天都在更新,我希望散列也每天更新。但这不会发生,直到我通过 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 是我正在阅读内容的哈希值。
最佳答案
您需要启动一个后台线程来不时检查文件日期并触发重新加载。
另一种选择是使用类似 Guava 的库它有一个 cache implementation最终“忘记”缓存中的项目。
注意:Guava 缓存希望您可以单独加载缓存中的每个元素。在您的情况下,您想删除整个缓存。一种简单的方法是将 mcatFullDataHash
作为单个项目保存在 Guava 缓存中。这样,您可以在 CacheLoader()
的 load()
方法中创建内部缓存,并将 Guava 缓存配置为在 24 小时后逐出该元素。
关于java - 减少java中的文件缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26098977/