簡體   English   中英

文件修改時間對於緩存失效是否可靠?

[英]Is file modification time reliable for cache invalidation?

每次修改文件時,我都想使某些本地生成的緩存無效。 手動運行某些命令行工具時會發生失效(不需要實時監視)

我的方法是:

  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 輕松啟動實例並將其用作緩存。

這是一個新的依賴項,但為您管理了很多技術性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM