Redis緩存

(圖片來源:http://www.javashuo.com/article/p-gufdgmph-eg.htmlhtml

訪問過程存在三種狀況:數據庫

(1)請求 --> 緩存中存在key  --> 返回
(2)請求 --> 緩存中不存在key --> 查詢數據庫 --> 數據庫存在key --> 寫入緩存 --> 返回 
(3)請求 --> 緩存中不存在key --> 查詢數據庫 --> 數據庫不存在key --> 返回

1. 爲何須要緩存?緩存

假設沒有緩存系統, 全部的請求都會直接鏈接數據庫。 當訪問量過大時,數據庫必須過載沒法鏈接,而且查詢數據庫是一個耗時操做。緩存能夠減小數據庫的查詢次數,避免同時大量數據庫鏈接操做。code

2.訪問存在三種狀況,第一種和第二種是正常訪問。在第三種狀況下,訪問時繞過了緩存直接鏈接緩存,徹底是在消耗資源,如何避免這種狀況?htm

若是緩存的目的是減小數據庫鏈接,那麼就不能讓訪問繞過緩存。blog

(1)加鎖。當緩存中不存在key時,須要獲取鎖,獲取鎖的客戶端能夠訪問數據庫,沒有獲鎖的用戶等待。目的在於有順序有組織的與數據庫交互,避免數據庫過載。例如:地鐵在人流量很大的時候,會採起限流策略,讓先來的人先進去。圖片

請求 --> 緩存中不存在key --> 獲取鎖(令牌) --> 查詢數據庫 --> 返回

(2)先確認身份,再訪問數據庫。能夠先在緩存中保存全部的key。當須要訪問數據庫時,先檢查是否存在這個key,若是存在,再訪問數據庫。也就是,確認身份,vip可進。ip

請求 --> 緩存中不存在key --> 檢測是否存在key -->(若是存在key) 查詢數據庫 --> 返回
相關文章
相關標籤/搜索