1、相關內容算法
後臺性能優化的第必定律:優先考慮使用緩存優化性能。數據庫
2、緩存的本質緩存
緩存的本質就是一個內存Hash表,數據以一對KeyValue鍵值對存儲在內存Hash表中。主要用戶存放讀寫比很高、不多變化的數據,網站數據一般遵循「二八定律」,即80%的訪問落在20%的數據上,所以,將這20%的數據緩存起來,能夠很好的改善系統性能。性能優化
3、合理的使用緩存服務器
合理的使用緩存對提升系統性能有不少好處,可是不合理的使用緩存反而會成爲系統的累贅甚至風險。濫用緩存的三種狀況以下:架構
數據的讀寫比至少應該是2:1以上,即寫入一次緩存,在數據更新前至少讀寫兩次,緩存纔有意義。真正實踐中這個比例可能會更高。併發
若是應用系統訪問數據沒有熱點,不遵循二八定律,即大部分數據訪問並無集中在小部分數據中,那麼緩存也沒有意義,由於大部分數據尚未被再次訪問就已經被擠出緩存了。分佈式
寫入緩存的數據最好能容忍必定時間的數據不一致,通常狀況下最好對緩存的數據設置失效時間(固定值+必定範圍的隨機值)。若是不能容忍數據的不一致,必須在數據更新時,刪除對應的緩存(思考:爲何不是更新緩存),可是這種狀況只針對讀寫比很是高的狀況。性能
四:緩存的常見問題優化手段優化
緩存雪崩咱們能夠簡單的理解爲:因爲原有緩存失效,新緩存未到期間(例如:咱們設置緩存時採用了相同的過時時間,在同一時刻出現大面積的緩存過時),全部本來應該訪問緩存的請求都去查詢數據庫了,而對數據庫CPU和內存形成巨大壓力,嚴重的會形成數據庫宕機。從而造成一系列連鎖反應,形成整個系統崩潰。
該類問題的解決方式主要有三種:
①加鎖排隊。大概原理是在去數據庫取數據的時候加鎖排隊,該方法僅僅適用於併發量不高的狀況。
②在原有失效時間基礎上加一個合理的隨機值(0-5分鐘)。分佈式場景下最多見的方式(單機也能夠)。
③給緩存加標記,在緩存失效以後更新緩存數據。
緩存穿透是指用戶查詢數據,在數據庫沒有,天然在緩存中也不會有。這樣就致使用戶查詢的時候,在緩存中找不到,每次都要去數據庫再查詢一遍,而後返回空(至關於進行了兩次無用的查詢)。
該類問題的主要解決方式。
①使用布隆過濾器作過濾。該方法僅僅用於查詢一個不可能存在的數據。
②把不存在的數據也緩存起來。最佳實踐:單獨設置比較短的過時時間,好比說五分鐘。
緩存中存放的是熱點數據,熱點數據又是緩存系統利用某種算法對不斷訪問的數據篩選淘汰出來的,在重建緩存數據的過程當中,系統的性能和數據庫負載都不太好,那麼多好的方式就是在緩存系統啓動的時候就把熱點數據加載好,這個緩存預加載的手段叫作緩存預熱。對於一些元數據如省市區列表,類目信息,就能夠在啓動的加載數據庫中的所有數據。
5、分佈式緩存架構
分佈式緩存是指緩存部署在多個服務器組成的集羣中,以集羣方式提供緩存服務,其架構方式有兩種:
①以JBosss Cache爲表明的須要更新同步的分佈式緩存(在全部服務器中保存相同的緩存數據)。
②以Memcache爲表明的互不通訊的分佈式緩存(應用程序經過一致性Hash等路由算法選擇緩存服務器遠程訪問遠程數據,能夠會容易的擴容,具備良好的可伸縮性)。