1. 程式人生 > 其它 >K——最近鄰演算法(KNN)

K——最近鄰演算法(KNN)

快取術語

  • 命中:在快取中找到資料;
  • 不命中/穿透:在快取中未找到資料;
  • 命中率:命中次數/總次數;

強快取

Cache-Control用於在 http 請求和響應中,通過指定指令來實現快取機制。

可選值

  • 可快取性:

    • public:所有方可以快取;
    • private:只有瀏覽器可以快取;
    • no-cache:每次必須先詢問伺服器資源是否已更新(協商快取);
    • no-store:不使用任何快取;
  • 快取期限

    • max-age:秒(儲存週期);
    • s-maxage:秒(共享快取如代理等);

常用組合

# 關閉快取
Cache-Control: no-store

# 使用協商快取
Cache-Control: no-cache
Cache-Control: max-age=0

# 使用共享快取,且快取時間較長,適用於不經常變動的靜態資源
Cache-Control:public, max-age=31536000

相關頭部

  • Expires響應頭包含日期/時間, 即在此時候之後,響應過期。如果在Cache-Control響應頭設定了max-age或者s-max-age指令,那麼Expires頭會被忽略(該頭很少用了)。

協商快取

  • Last-Modified/If-Modified-Since:基於時間。
    • Last-Modified響應首部,資源做出修改的日期及時間。
    • If-Modified-Since請求首部,上一次Last-Modified值。If-Modified-Since只可以用在GETHEAD請求中。
  • ETag/If-None-Match:基於實體內容生成一段 hash 字串,http1.1 引入,優先順序高於Last-Modified/If-Modified-Since
    • ETag響應首部,這可以讓快取更高效,並節省頻寬,因為如果內容沒有改變,Web 伺服器不需要傳送完整的響應。
    • If-None-Match請求首部,上一次ETag值。

有了 Last-Modified 為什麼還要 ETag?

  • Last-Modified精確度比ETag要低, Last-Modified基於時間,精度是秒,假如檔案在 1 秒之內修改, Last-Modified無法識別;
  • 一些資源內容未變,但最後修改時間改變了,基於時間來說,資源改變了,但基於內容來說,資源未變;
  • 某些伺服器無法精準獲取檔案修改時間。