ドキュメントにはこう書いてある。
max はキャッシュ内の要素の最大数を設定します。キャッシュがオーバーフローすると、最近使用されていない (LRU) 要素が削除されます。
nginx またはサーバーの再起動後も持続しますか?
これはどのように追跡されるのでしょうか? メモリ内ですか? それとも、ファイル システムの最終アクセス タイムスタンプを使用しているのでしょうか?
それに関する情報は見つかりません。
LRU ファイルが判別できない場合 (再起動のため) の情報はどうなりますか?
編集:
私は nginx キャッシュ ローダー プロセスを認識しています。そのプロセスがなければ、キャッシュ ファイルはまったく永続化されません。
ドキュメントによると、この読み込みプロセスにはメタデータも含まれますが、メタデータが何であるかについてはより具体的には説明されていません。
問題は、このメタデータには最終アクセスのタイムスタンプも含まれるかどうかです。
ただし、それを収容するには、まずそれを書き込む必要があります。
ファイルに inotifywait を設定し、それを要求しました。キャッシュ ファイルへの HTTP 要求の結果は次のようになります。
cache-filename OPEN
cache-filename ACCESS
cache-filename CLOSE_NOWRITE,CLOSE
ファイルの変更は発生していないように見えるため、LRU データはディスクに書き込まれず、したがって永続的ではないという予備的な結論に至ります。
ただし、データは他の場所に書き込まれる可能性があります。また、後で別のプロセスによって RAM からディスク (キャッシュ ファイル) に書き込まれる可能性もあります。したがって、データは永続的ですが、ディスク上で最新であることが保証されるわけではありません。
それでも、この疑問は未だに解決されていない。
答え1
nginx は、ファイルのアクセス時間を使用して、LRU の対象を示すようです。ディスクの使用状況により、他のサーバーよりも小さいキャッシュでパーティション分割されているサーバー群の atime を検査すると、キャッシュが小さく、LRU 圧力が高いサーバーには、atime (find の -amin) で測定された特定の期間を超えるファイルがないようです。これを確認するのに使用したコマンドは次のとおりです。
for i in `seq 1000 100 4000`; do
echo -n "Files accessed more than $i minutes ago: "
find /opt/nginx-cache/data -type f -amin +$i | wc -l
done
そして、私たちのサーバーの 1 つからの出力は次のようになります。
Files accessed more than 1000 minutes ago: 52154
Files accessed more than 1100 minutes ago: 40582
Files accessed more than 1200 minutes ago: 25527
Files accessed more than 1300 minutes ago: 19567
Files accessed more than 1400 minutes ago: 13384
Files accessed more than 1500 minutes ago: 7683
Files accessed more than 1600 minutes ago: 4597
Files accessed more than 1700 minutes ago: 3038
Files accessed more than 1800 minutes ago: 1916
Files accessed more than 1900 minutes ago: 1251
Files accessed more than 2000 minutes ago: 837
Files accessed more than 2100 minutes ago: 585
Files accessed more than 2200 minutes ago: 459
Files accessed more than 2300 minutes ago: 365
Files accessed more than 2400 minutes ago: 258
Files accessed more than 2500 minutes ago: 101
Files accessed more than 2600 minutes ago: 8
Files accessed more than 2700 minutes ago: 0
Files accessed more than 2800 minutes ago: 0
Files accessed more than 2900 minutes ago: 0
Files accessed more than 3000 minutes ago: 0
これが正しければ、キャッシュ ローダーは再起動時にファイルの atime を読み取り、必要に応じて LRU ファイルを正しく削除する可能性があります。
答え2
このドキュメントhttp://czerasz.com/2015/03/30/nginx-caching-tutorial/「キャッシュ ローダー」と呼ばれるプロセスがあることを説明します。これは (起動時に) 1 回だけ実行され、メタデータをメモリ ゾーンにロードします。すべてのキーがロードされるまで、繰り返し実行されます。