本節開始,我就準備對redis的每個分支做具體的筆記闡述。這裡我們都已經很熟練的使用快取了。但是有沒有想過,為啥用快取,什麼時候用快取,常見的快取有哪些?
在沒有快取的時候,我們一般的前端介面查詢都是直接通過後台查資料庫把資料返回給前台。我們知道一次sql 的io互動是比較耗效能的。當我們處於高併發的狀態下查詢資料瓶頸就在於sql查詢這裡,而且對該錶有插入或者更新的時候也會對該資源進行鎖定。
簡單的說計算機系統分為如下三層結構:
cpu,1-32mb 20-40ns
記憶體,32-96gb 100ns
磁碟,1-4tb 3-5ms
可見訪問速度最快的是cpu,但是他的儲存空間也是最小的。根據二八定律,在整個儲存資料中大概只有20%的資料是我們頻繁訪問的,80%的資料甚少或者極少訪問。因此我們只需要保證20%的資料做到快速訪問就可以了。
因此快取的目的,保證少數頻繁被訪問的資料快速被讀到。避免每次被磁碟拖累。
剛剛說過,快取的目的是保證20%頻繁訪問的資料快速的被讀取出來。如果快取和資料在同一層面,那麼20%的資料和80%的資料查詢沒啥區別了。如果快取放在資料的後面,我們的術語叫著持久化。因此快取放置於業務資料的前面。
什麼時候用exists 什麼時候用in
in not in exists not exists 使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行 子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起 待子查...
什麼時候用GET?什麼時候用POST?
get和post兩種方法都是將資料送到伺服器,但你該用哪一種呢?http標準包含這兩種方法是為了達到不同的目的。post用於建立資源,資源的內容會被編入http請示的內容中。例如,處理訂貨表單 在資料庫中加入新資料行等。當請求無 時 如進行搜尋 便可使用get方法 當請求有 時 如新增資料行 則用p...
什麼時候用堆,什麼時候用棧?
參考文章 c 面試題之記憶體分配 一 首先,回顧一下c c 的記憶體分配機制。乙個c c 程式編譯時記憶體分為5大儲存區 堆區 棧區 靜態區 全域性區 文字常量區 儲存字串常量 程式 區 存放二進位制程式 下面主要闡述前面三個。1 靜態儲存區域 靜態儲存區域的 內存在程式編譯時就已經分配好,這塊內存...