keys_zone = myCache: 8m หมายถึงอะไร
ตามที่เอกสารระบุไว้ nginx จะเก็บคีย์ที่ใช้งานและข้อมูลเกี่ยวกับข้อมูลทั้งหมดไว้ในโซนหน่วยความจำที่ใช้ร่วมกันซึ่งname
และsize
กำหนดค่าโดยพารามิเตอร์ keys_zone เป็นเรื่องของความสมบูรณ์ให้แบ่งลงต่อส่วน
/var/cache/nginx
เป็นที่สำหรับเก็บแคชจริง ข้างในโฟลเดอร์ไฟล์แคชเป็นไฟล์ไบนารี่ แต่คุณสามารถมองเห็นแท็ก html ได้อย่างง่ายดาย
levels=1:2
คือระดับพารามิเตอร์ตั้งค่าจำนวนระดับไดเรกทอรีย่อยในแคช
keys_zone=myCache:8m
กำลังกำหนดเขตหน่วยความจำที่แชร์ที่ชื่อว่า myCache ด้วยขนาดสูงสุด 8 MB มันถือคีย์ที่ใช้งานและเมตาดาต้าของแคชทั้งหมด ดังนั้นเมื่อใดก็ตามที่ nginx ตรวจสอบว่าหน้าถูกแคชหรือไม่มันจะพิจารณาโซนหน่วยความจำที่ใช้ร่วมกันก่อนจากนั้นจึงค้นหาตำแหน่งของแคชจริงใน/var/cache/nginx
ถ้ามีอยู่แคช
max_size
มีขนาดแคชสูงสุดเช่นขนาดไฟล์ที่เปิด /var/cache/nginx
เปิด
inactive=1h
ระบุแคชเวลาที่ไม่ใช้งานสูงสุดสามารถจัดเก็บได้ ข้อมูลแคชที่ไม่ได้เข้าถึงในช่วงเวลาที่ระบุโดยinactive
พารามิเตอร์จะถูกลบออกจากแคชโดยไม่คำนึงถึงความสดใหม่
การตรวจสอบและการลบแคชทำงานอย่างไร
นำมาจากรายการส่งจดหมายของ nginx
Directive proxy_cache_validระบุว่าการตอบสนองนั้นจะใช้เวลานานเท่าไร (และจะถูกส่งคืนโดยไม่มีการร้องขอให้แบ็กเอนด์) หลังจากเวลานี้การตอบกลับจะถูกพิจารณาว่า "เก่า" และจะไม่ถูกส่งคืนหรือจะขึ้นอยู่กับการตั้งค่าproxy_cache_use_stale
อาร์กิวเมนต์ที่ไม่แอ็คทีฟของproxy_cache_pathระบุระยะเวลาที่การตอบสนองจะถูกเก็บไว้ในแคชหลังจากใช้งานครั้งสุดท้าย โปรดทราบว่าแม้การตอบกลับค้างจะได้รับการพิจารณาเมื่อเร็ว ๆ นี้หากมีการร้องขอไปยังพวกเขา
อย่างที่ฉันเข้าใจนี่คือรหัสเทียมว่า 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) สูงกว่าค่า inactive ที่ระบุ (1h) ใน proxy_cache_path
ตราบใดที่คำขอและเข้าถึงแคชเฉพาะวัตถุแคชนั้นจะยังคงใช้งานได้จนถึง 12 ชั่วโมงหลังจากที่วัตถุนั้นใส่แคช หลังจากนั้นแคชก็ถือว่าไม่ถูกต้องดังนั้น nginx จะดึงข้อมูลจากแบ็กเอนด์และรีเซ็ตตัวจับเวลาที่ถูกต้อง แต่ถ้าวัตถุไม่ได้ใช้งาน (ไม่ได้เข้าถึง) มากกว่าหนึ่งชั่วโมง - แม้ในช่วงเวลาที่ถูกต้องแคช 12 ชั่วโมง -, nginx จะลบเพราะinactive
พารามิเตอร์
365d
และถูกต้อง1d
แล้ว nginx จะดึงคำขอในแคชในแต่ละวันเป็นเวลาหนึ่งปีแม้ว่าจะไม่มีใครทำคำขอนั้นหรือไม่