昨天(Day 23)我們把 Magento 的 HTTP 請求流程與 Page Cache 插手時機 講清楚了,也更確定真正決定快取命中的,是那把鑰匙——identifier。
今天就把我們的改善方案攤開來說:透過「修改請求識別符(identifier)」與「移除不必要參數」來降低重複快取,讓 Redis 更乾淨、命中率更穩定。
優化請求的傳遞過程,讓相同內容的頁面只會對應到同一把 key。
修改請求識別符
移除不必要的參數
參數排序(lexicographical order)
我們只針對 URL 中「?」後面的參數 做處理;保留的原則很單純:
只保留會影響實際輸出的 HTML 的參數——也就是會改變頁面內容、排序、分頁或篩選結果的那些;其餘不影響內容(例如行銷追蹤、分析識別)的參數一律移除。
product_list_order
(排序欄位):會改變呈現順序 → 影響 HTMLproduct_list_dir
(升/降冪):會改變呈現順序 → 影響 HTMLq
(搜尋):會改變列表內容 → 影響 HTMLp
(頁數):會顯示不同分頁內容 → 影響 HTMLcat
(分類 ID):會切換分類來源 → 影響 HTMLs
(搜尋):改變文章列表內容 → 影響 HTMLnp
(頁數):顯示不同頁段 → 影響 HTML除了以上清單之外,其餘參數一律丟掉,以確保快取一致性。
原始請求
https://www.mrliving.com.tw/catalogsearch/result/index/?MRL_filters_coftable=341&abc=222&MRL_filters_preorder=134&product_list_dir=asc&q=sofa&product_list_order=name&gad_source=1&gclid=xxx
處理動作
abc=222
、gad_source=1
、gclid=xxx
處理後
https://www.mrliving.com.tw/catalogsearch/result/index/?MRL_filters_coftable=341&MRL_filters_preorder=134&product_list_dir=asc&product_list_order=name&q=sofa
重點:不管同一組參數原本順序怎麼換,最後都會被「正規化」成同一個樣子,因此會命中同一個快取 key。
Day 24 我們把策略講完:用「保留必要參數 + 移除噪音 + 字母序排序」來讓快取更乾淨。
明天(Day 25)我們就把這套邏輯實際落到程式裡,並用幾組前/後對照來驗證: