在缓存中保存文件并将其修改时间修改为过去安全吗?

时间:2013-03-26 12:30:49

标签: linux caching filemtime

想象一下linux机器上某些进程的基于文件的缓存。

  • 当源数据发生变化时,我们只制作流程(资源消耗)。
  • 对于结果的每个查询,我们都会检查基础数据是否已更改。
  • 如果数据发生变化,我们会处理数据并保存缓存。
  • 通过查询文件修改时间(源数据和缓存文件)来检查更改和缓存新鲜度(如果在上次更改后创建)。

棘手的部分:这个过程需要一些时间 - 数据可能会发生变化,而我们正在处理它们。将缓存的修改时间更改为创建查询时间是否安全?

它类似于:

  1. 源数据在20:00:01更改。
  2. 查询是在20:00:05 - 我们正在重新创建缓存。
  3. 20:04:15结束。
  4. 保存缓存。
  5. 将缓存文件的修改时间更改为20:00:05(显示20:00:05之后的每次更改都不计算在内)。
  6. 安全吗?对于备份,部署,源代码控制......什么情况可能会导致这种解决方案出现问题?

1 个答案:

答案 0 :(得分:1)

没有。安全的解决方案是将带有临时名称的文件写入同一目录,然后在写入所有数据后将其重命名为

  1. 这样,您将永远不会有不完整/截断的文件
  2. 如果您有错误,原始数据仍将完整
  3. 对于错误处理,您只需要删除临时文件
  4. 它还解决了备份,源代码控制的所有问题:你可以让它们忽略临时文件。