keys_zone = myCache:8mはどういう意味ですか?
ドキュメントが前記、nginxのは続けるデータに関するすべてのアクティブなキー情報が格納され、その共有メモリ区域にname
及びsize
keys_zoneパラメータによって構成されています。完全性の問題として、部品ごとに分解しましょう
/var/cache/nginx
実際のキャッシュが保存されている場所です。フォルダー内では、キャッシュファイルはバイナリファイルでしたが、その中のhtmlタグを簡単に見つけることができます。
levels=1:2
is levelsパラメータは、キャッシュ内のサブディレクトリレベルの数を設定します。
keys_zone=myCache:8m
最大サイズ8 MBのmyCacheという名前の共有メモリゾーンを定義していました。キャッシュのすべてのアクティブなキーとメタデータを保持します。そのため、nginxはページがキャッシュされているかどうかを確認するたびに、まず共有メモリゾーンを/var/cache/nginx
調べてから、キャッシュが存在する場合に実際のキャッシュの場所を探します。
max_size
はキャッシュの最大サイズでした(例:上のファイルサイズ)/var/cache/nginx
。
inactive=1h
キャッシュを保存できる最大非アクティブ時間を指定します。inactive
パラメーターで指定された時間中にアクセスされなかったキャッシュデータは、鮮度に関係なくキャッシュから削除されます。
キャッシュの検証と削除の仕組み
nginxメーリングリストから取得
ディレクティブproxy_cache_validは、応答が有効と見なされる(およびバックエンドへのリクエストなしで返される)期間を指定します。この時間が経過すると、応答は「古くなった」と見なされ、返されないか、proxy_cache_use_stale設定に依存します。
proxy_cache_pathの引数inactiveは、最後の使用後に応答がキャッシュに保存される期間を指定します。古い応答であっても、それらへの要求がある場合は最近使用されたと見なされることに注意してください。
私が理解しているように、ここでnginxがどのように動作するかの擬似コード
リクエストが来たら
if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
use it
else:
retrieve from backend
replace the old ones
他のプロセスでは、キャッシュマネージャーがこのロジックを実行します
if (now() - cache.last_used) > inactive:
del cache
if all-cache.size > max-size:
del *the most inactive cache* until size < max-size
proxy_cache_valid(12h)がproxy_cache_pathで指定された非アクティブな値(1h)よりも大きい場合はどうなりますか?
要求が特定のキャッシュにアクセスする限り、そのキャッシュオブジェクトは、オブジェクトがキャッシュに入れられてから12時間後まで有効です。その後、キャッシュは無効とみなされたため、nginxはバックエンドからフェッチして有効なタイマーをリセットします。しかし、オブジェクトが1時間以上非アクティブ(アクセスされていない)だった場合(12時間の有効なキャッシュ期間であっても)、nginxはパラメーターのためにオブジェクトを削除しinactive
ます。
365d
有効で有効な場合1d
、nginxは誰もそのリクエストを行わない場合でも1年間毎日キャッシュ内のリクエストをフェッチしますか?