2

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

我的方法是:

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

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

文件将使用 VCS 和云存储(如 Dropbox 或 OneDrive)共享。

问题与操作系统无关(即它必须在每个常用操作系统(Windows、Mac OS、其他 POSIX 兼容)上工作)。

4

2 回答 2

1

文件修改时间对于缓存失效是否可靠?

我会说是的,我认为你应该考虑使用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/

于 2019-08-19T19:37:33.807 回答
0

Redis 似乎是您更好的选择!您可以通过 docker 轻松启动实例并将其用作缓存。

这是一个新的依赖项,但会为您管理很多技术性问题

于 2019-08-13T16:35:55.653 回答