[英]Is file modification time reliable for cache invalidation?
每次修改文件時,我都想使某些本地生成的緩存無效。 手動運行某些命令行工具時會發生失效(不需要實時監視)
我的方法是:
是否使用文件修改日期足以使這種方法可靠,或者如果文件修改日期未更改,我還應該檢查文件快捷方式(某些哈希函數)(誤報不是問題,但每次文件都需要使緩存無效)已經改變)。
文件將使用 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
乍一看令人生畏,但它是一個非常強大的工具。 絕對值得花時間學習它; 它會得到一百倍的回報!
Redis 似乎是您更好的選擇! 您可以通過 docker 輕松啟動實例並將其用作緩存。
這是一個新的依賴項,但為您管理了很多技術性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.