文件修改时间对于缓存失效是否可靠?
我会说是的,我认为你应该考虑使用Make
.
假设我们需要缓存一个昂贵进程的计算:计算 1 和n之间的所有数字。
数字n是从文件中读取的input.txt
。
该文件count.cache
包含 1 和n之间的所有数字的序列。
给定以下结构:
data/
├── input.txt
├── Makefile
以及以下内容Makefile
:
count.cache: input.txt
cat $^ | xargs seq >$@
一开始input.txt
是空的。让我们在其中输入一些数字:
echo '5'>input.txt
然后让我们运行make
:
make
输出如下:
cat input.txt | xargs seq >count.cache
以下是 的内容count.cache
:
cat count.cache
1
2
3
4
5
现在让我们make
再次运行:
make
make: `count.cache' is up to date.
为什么?为了生成count.cache
(目标),您需要input.txt
(先决条件)。如果先决条件没有改变,那么目标仍然有效。
让我们更新input.txt
:
echo '10'>input.txt
让我们make
再次运行:
make
cat input.txt | xargs seq >count.cache
默认情况下make
输出生成目标所需的命令。正如你所看到make
的,它发现它需要重新生成count.cache
,因为它的先决条件input.txt
已经改变。
让我们验证一下:
cat count.cache
1
2
3
4
5
6
7
8
9
10
make
乍一看让人望而生畏,但它是一个非常强大的工具。绝对值得花时间学习它;它会得到一百倍的回报!
https://www.gnu.org/software/make/