缓存失效的文件修改时间可靠吗?



我想在每次修改文件时使一些本地生成的缓存失效。 手动运行某些命令行工具时会发生失效(无需实时监视(

我的方法是:

  1. 首先生成缓存并存储文件修改日期。
  2. 在随后的运行中,检查文件修改日期是否与存储的日期不同 - 如果是:使缓存无效,然后再次生成它。

使用文件修改日期是否足以使此方法可靠,或者如果文件修改日期没有更改,我还应该检查文件快捷方式(一些哈希函数((误报不是问题,但每次文件更改时都需要使缓存失效(。

文件将使用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 轻松启动实例并将其用作缓存。

这是一个新的依赖项,但为您管理了很多技术细节

相关内容

  • 没有找到相关文章

最新更新