0

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

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

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

它是这样的:

  1. 源数据在 20:00:01 更改。
  2. 查询出现在 20:00:05 - 我们正在重新创建缓存。
  3. 20:04:15 结束。
  4. 保存缓存。
  5. 将缓存文件的修改时间更改为 20:00:05(以表明 20:00:05 之后的每次更改都不算在内)。

安全吗?对于备份、部署、源代码控制......这种解决方案在哪些情况下可能会产生问题?

4

1 回答 1

1

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

  1. 这样,您将永远不会有不完整/截断的文件
  2. 如果出现错误,原始数据仍将完好无损
  3. 对于错误处理,您只需要删除临时文件

它还解决了备份、源代码控制的所有问题:您可以让他们忽略临时文件。

于 2013-03-26T12:34:31.597 回答