拿到TP最新版後,很多朋友第一件事就是跑通基礎功能,但真正上線時,緩存那關才是考驗。緩存穿透指請求直接繞過緩存打到數據庫,比如查一個不存在的key,每次都會穿透,數據庫壓力瞬間爆表。我通常會用布隆過濾器或者緩存空對象,攔截掉這些無效請求,效果立竿見影。
緩存擊穿更隱蔽,它發生在某個熱點key過期瞬間,大量並發請求同時湧入,直接壓垮數據庫。解決辦法是給熱點key加互斥鎖,或者讓緩存數據永不過期,後台異步更新。我試過用TP的緩存標簽加鎖機製,能精準攔下並發高峰,實測數據庫壓力下降80%。
緩存雪崩更狠,大量緩存同時過期或者Redis宕機,所有請求砸向數據庫,係統直接癱瘓。我的做法是把緩存過期時間錯開,加隨機數,比如5分鍾過期就改成5分鍾±隨機秒數。另外做好服務降級和限流,TP最新版裏自帶的限流器配合Redis集群,能扛住突發流量。
實戰時別光看文檔,一定要在測試環境模擬高並發。我習慣用JMeter壓測,設置1000並發線程,分別打穿透請求、熱點key過期場景和批量key同時失效。觀察數據庫連接數和響應時間,如果飆高就調整參數,直到曲線平穩。TP的緩存驅動支持文件、Redis、Memcached,生產環境優先用Redis集群,主從加哨兵保命。
