快取命中率

快取命中率

終端用戶訪問加速節點時,如果該節點有快取住了要被訪問的數據時就叫做命中,如果沒有的話需要回原伺服器取,就是沒有命中。取數據的過程與用戶訪問是同步進行的,所以即使是重新取的新數據,用戶也不會感覺到有延時。 命中率=命中數/(命中數+沒有命中數), 快取命中率是判斷加速效果好壞的重要因素之一。

實際案例

這裡我可以舉一個實際的案例,JavaEye2.0網站在使用對象快取之前,通過MySQL的監控工具進行觀察,在連續24小時的平均每秒傳送SQL條數超過了200條,在使用對象快取之後,連續24小時的平均每秒傳送SQL條數下降到了120條左右,幾乎下降了一半。

快取命中率快取命中率

考慮到很多SQL都是分頁語句,關聯查詢,條件查詢,集合操作,都是不能被快取的SQL,而真正能夠被快取的SQL只有根據主鍵查詢對象和對象關聯對象的查詢。所以真正能夠被快取的SQL估計最多占所有SQL的60%。所以換算下來,套用快取的命中率之高,已經相當驚人了。

不過這裡要提醒的一點,有將近一半的SQL都被快取,不意味著性能可以提升一倍。這是因為能夠被快取的都是按照主鍵查詢單條記錄的SQL,這些SQL本身即使傳送到資料庫,對資料庫造成的壓力也沒有想像的那么大。真正對資料庫造成龐大壓力的正是那些沒有索引的大表查詢,和造成了 全表掃描的關聯查詢,這些一旦涉及到全表掃描的查詢,才是性能的真正殺手。當然了,不管怎么說,通過使用對象快取,是毫無疑問可以大幅度降低資料庫的負載壓力的,有效提升web套用的性能的。

關於這一點,我再給出一組數據來加深大家的印象,通過使用作業系統網路工具進行統計:

JavaEye網站web server的連線埠每秒數據流量是2MB;

JavaEye網站的MySQL資料庫連線埠的每秒數據流量是1.2MB;

而網站的memcached的連線埠每秒的數據流量高達5MB

熱門詞條

聯絡我們