我想在每次修改文件时使一些本地生成的缓存失效。 手动运行某些命令行工具时会发生失效(无需实时监视(
我的方法是:
- 首先生成缓存并存储文件修改日期。
- 在随后的运行中,检查文件修改日期是否与存储的日期不同 - 如果是:使缓存无效,然后再次生成它。
使用文件修改日期是否足以使此方法可靠,或者如果文件修改日期没有更改,我还应该检查文件快捷方式(一些哈希函数((误报不是问题,但每次文件更改时都需要使缓存失效(。
文件将使用VCS和云存储(如Dropbox或OneDrive(共享。
问题是与操作系统无关的(即它必须在每个常用的操作系统(Windows,Mac OS,其他POSIX兼容(上运行(。
缓存失效的文件修改时间可靠吗?
我会说是的,我认为您应该考虑使用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/
Redis 似乎是您更好的选择!您可以通过 docker 轻松启动实例并将其用作缓存。
这是一个新的依赖项,但为您管理了很多技术细节