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

标签 linux caching filemtime

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

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

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

是这样的:

  1. 源数据在 20:00:01 发生了变化。
  2. 20:00:05 收到查询 - 我们正在重新创建缓存。
  3. 于 20:04:15 完成。
  4. 保存缓存。
  5. 将缓存文件的修改时间更改为 20:00:05(表明 20:00:05 之后的每次更改均不计算在内)。

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

最佳答案

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

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

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

关于linux - 保存文件并将其修改时间修改为过去在缓存中安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637149/

相关文章:

c# - 在 IMemoryCache 中存储和检索列表

ios - 缓存模型(DTO)类供以后使用

windows - ctime, mtime, holding directory, windows, linux

php - filemtime() [函数.filemtime] : stat failed for filenames with umlauts

php - glob() - 按上次修改的日期时间戳对文件数组进行排序

linux - 在 linux 中是否有用于流 i/o 的真实文件?

linux - puppet 踢和环境变量

c - 为什么inbuf = xmalloc(insize + page_size - 1)?

ruby - Popen 获取新运行进程的 pid

caching - 使用 Redis 的无界多维索引