主要是工做中用到redis,有的時候會由於某些點去重複的查詢,索性對redis進行一次梳理,大體會從如下幾方面去梳理:redis的簡介;redis分佈式鎖;緩存穿透、緩存雪崩、緩存擊穿下的解決措施……
Redis是遠程內存數據庫、非關係型數據庫(non-relational database),能夠存儲鍵(key)與5種不一樣類 型的值(value)之間的映射(mapping),能夠將存儲在內存的鍵值對數據持久化到硬盤,可使用複製特性來擴展讀性能,還可使用客戶端分片來擴展寫性能。html
關鍵點:非關係型數據庫、五種不一樣類型的值、持久化到硬盤的方式、複製特性(主從複製)、客戶端分片mysql
定義:redis
優勢sql
定義:數據庫
分類:緩存
面向高性能併發讀寫的key-value數據庫服務器
面向海量數據訪問的文檔數據庫數據結構
面向可擴展性的分佈式數據庫多線程
優勢併發
數據類型 | 值類型 | 備註 |
---|---|---|
String | 字符串、整數或者浮點數 | / |
List | 列表 | 1. 能夠儲存多個相同的字符串<br/>2. 有序 |
Set | 無序集合 | 1. 經過使用散列表來保證本身存儲的每一個字符串都是各不相同的<br/>2. 無序 |
hash | 散列 | / |
zset | 有序集合 | / |
Redis命令參考:詳細連接
選項 | 同步頻率 | 備註 |
---|---|---|
always | 每一個寫命令都同步 | 會影響服務器性能 |
everysec | 每秒同步一次 | 比較好,能夠保證系統奔潰時只會丟失一秒左右的數據 |
no | 讓操做系統來決定什麼時候同步 | 意義不大,會增長系統崩潰時的數據量 |
單個Redis服務器會發生單點故障,而且一臺服務器須要處理全部的請求負載,壓力較大
當啓動一個Slave進程後,它會向Master發送一個SYNC Command,請求同步鏈接。不管是第一次鏈接仍是從新鏈接,Master都會啓動一個後臺進程,將數據快照保存到數據文件中,同時Master會記錄全部修改數據的命令並緩存在數據文件中。後臺進程完成緩存操做後,Master就發送數據文件給Slave,Slave端將數據文件保存到硬盤上,而後將其在加載到內存中,接着Master就會全部修改數據的操做,將其發送給Slave端。若Slave出現故障致使宕機,恢復正常後會自動從新鏈接,Master收到Slave的鏈接後,將其完整的數據文件發送給Slave,若是Mater同時收到多個Slave發來的同步請求,Master只會在後臺啓動一個進程保存數據文件,而後將其發送給全部的Slave,確保Slave正常
名稱 | 類型 | 數據庫存儲選項 | 查詢類型 | 附加功能 |
---|---|---|---|---|
Redis | 使用內存存儲(in-memory)的非關係數據庫 | 字符串、列表、集合、散列表、有序集合 | 每種數據類型都有本身的專屬命令,另外還有批量操做(bulk operation)和不徹底(partial)的事務支持 | 發佈與訂閱,主從複製(master/slave replication),持久化,腳本(存儲過程,stored procedure) |
memcached | 使用內存存儲的鍵值緩存 | 鍵值之間的映射 | 建立命令、讀取命令、更新命令、刪除命令以及其餘幾個命令 | 爲提高性能而設的多線程服務器 |
MySQL | 關係數據庫 | 每一個數據庫能夠包含多個表,每一個表能夠包含多個行;能夠處理多個表的視圖(view);支持空間(spatial)和第三方擴展 | SELECT、 INSERT、 UPDATE、 DELETE、函數、存儲過程 | 支持ACID性質(須要使用InnoDB),主從複製和主主複製 (master/master replication) |
PostgreSQL | 關係數據庫 | 每一個數據庫能夠包含多個表,每一個表能夠包含多個行;能夠處理多個表的視圖;支持空間和第三方擴展;支持可定製類型 | SELECT、 INSERT、 UPDATE、 DELETE、內置函數、自定義的存儲過程 | 支持ACID性質,主從複製,由第三方支持的多主複製(multi-master replication) |
MongoDB | 使用硬盤存儲(on-disk)的非關係文檔存儲 | 每一個數據庫能夠包含多個表,每一個表能夠包含多個無schema(schema-less)的BSON文檔 | 建立命令、讀取命令、更新命令、刪除命令、條件查詢命令等 | 支持map-reduce操做,主從複製,分片,空間索引(spatial index) |
讀寫性能優異
支持豐富數據類型
支持事務
豐富的特性