一、緩存命中率的介紹
命中:可以直接通過緩存獲取到需要的數據。
不命中:無法直接通過緩存獲取到想要的數據,需要再次查詢數據庫或者執行其它的操作。原因可能是由於緩存中根本不存在,或者緩存已經過期。
通常來講,緩存的命中率越高則表示使用緩存的收益越高,應用的性能越好(響應時間越短、吞吐量越高),抗並發的能力越強。
由此可見,在高並發的互聯網系統中,緩存的命中率是至關重要的指標。
二、如何監控緩存命中率
redis提供了INFO這個命令,能夠隨時監控服務器的狀態,只用telnet到對應服務器的端口,執行命令即可
127.0.0.1> info
在輸出的信息里面有這幾項和緩存的狀態比較有關系:
keyspace_hits:14414110
keyspace_misses:3228654
used_memory:433264648
expired_keys:1333536
evicted_keys:1547380
通過計算hits和miss,我們可以得到緩存的命中率:14414110 / (14414110 + 3228654) = 81% ,一個緩存失效機制,和過期時間設計良好的系統,命中率可以做到95%以上
三、提高緩存命中率的方法
從架構師的角度,需要應用盡可能的通過緩存直接獲取數據,並避免緩存失效。這也是比較考驗架構師能力的,需要在業務需求,緩存粒度,緩存策略,技術選型等各個方面去通盤考慮並做權衡。盡可能的聚焦在高頻訪問且時效性要求不高的熱點業務上(如字典數據、session、token),通過緩存預加載(預熱)、合理調整緩存有效期的時間 (避免同時失效)、增加存儲容量、調整緩存粒度、更新緩存等手段來提高命中率。
對於時效性很高(或緩存空間有限),內容跨度很大(或訪問很隨機),並且訪問量不高的應用來說緩存命中率可能長期很低,可能預熱后的緩存還沒來得被訪問就已經過期了。