Redis的存儲類型、集羣架構、以及應用場景

什麼是redis

redis是一種支持Key-Value等多種數據結構的存儲系統。可用於緩存、事件發佈或訂閱、高速隊列等場景。該數據庫使用ANSI C語言編寫,支持網絡,提供字符串、哈希、列表、隊列、集合結構直接存取,基於內存,可持久化,支持多種開發語言。redis

file

redis在高併發場景下的做用不言而喻,今天主要分享Redis你們比較關心的如下幾個方面。算法

file

redis的數據類型

支持多種數據類型:數據庫

1.string(字符串)

String數據結構是簡單的key-value類型,value其實不只能夠是String,也能夠是數字。segmentfault

常規key-value緩存應用;緩存

2.list(列表)

Redis的list是每一個子元素都是String類型的雙向鏈表,能夠經過push和pop操做從列表的頭部或者尾部添加或者刪除元素,這樣List便可以做爲棧,也能夠做爲隊列。服務器

使用List結構,咱們能夠輕鬆地實現最新消息排行等功能。網絡

3.hash(散列)

Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。數據結構

存儲部分變動的數據,如用戶信息等。架構

4.sets (集合)

set就是一個集合,集合的概念就是一堆不重複值的組合。利用Redis提供的set數據結構,能夠存儲一些集合性的數據。set中的元素是沒有順序的。併發

5.sorted set(有序集合)

和set相比,sorted set增長了一個權重參數score,使得集合中的元素可以按score進行有序排列。

redis的特色

1.單線程,利用redis隊列技術並將訪問變爲串行訪問,消除了傳統數據庫串行控制的開銷

2.redis具備快速和持久化的特徵,速度快,由於數據存在內存中。

3.分佈式 讀寫分離模式

4.支持豐富數據類型

5.支持事務,操做都是原子性,所謂原子性就是對數據的更改要麼所有執行,要不所有不執行。

6.可用於緩存,消息,按key設置過時時間,過時後自動刪除

redis的持久化存儲

Redis支持兩種數據持久化方式:RDB方式和AOF方式。前者會根據配置的規則定時將內存中的數據持久化到硬盤上,後者則是在每次執行寫命令以後將命令記錄下來。兩種持久化方式能夠單獨使用,可是一般會將二者結合使用。

1.RDB持久化

原理是將Reids在內存中的數據庫記錄定時dump到磁盤上的RDB持久化。

指定的時間間隔內將內存中的數據集快照寫入磁盤,實際操做過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換以前的文件,用二進制壓縮存儲。

file

2.AOF(append only file)持久化

原理是將Reids的操做日誌以追加的方式寫入文件。

以日誌的形式記錄服務器所處理的每個寫、刪除操做,查詢操做不會記錄,以文本的方式記錄,能夠打開文件看到詳細的操做記錄。

file

redis的集羣方案有哪些

redis 集羣方案主要有兩類,一是使用類 codis 的架構,按組劃分,實例之間互相獨立;

另外一套是基於官方的 redis cluster 的方案。

1.codis 架構

file

codis是一個豌豆莢團隊開源的使用Go語言編寫的Redis
Proxy使用方法和普通的redis沒有任何區別,設置好下屬的多個redis實例後就能夠了,使用時在本須要鏈接redis的地方改成鏈接codis,它會以一個代理的身份接收請求
並使用一致性hash算法,將請求轉接到具體redis,將結果再返回codis,和以前比較流行的twitter開源的Twemproxy功能相似。

這套架構的特色:

  • 分片算法:基於 slot hash桶;
  • 分片實例之間相互獨立,每組 一個master 實例和多個slave;
  • 路由信息存放到第三方存儲組件,如 zookeeper 或etcd
  • 旁路組件探活

codis是目前用的最多的集羣方案,codis一個比較大的優勢是能夠不停機動態新增或刪除數據節點,舊節點的數據也能夠自動恢復到新節點。

2.基於官方 redis cluster 的方案

file

  • Redis官網推出,可線性擴展到1000個節點
  • 無中心架構
  • 一致性哈希思想
  • 客戶端直連redis服務,免去了proxy代理的損耗

具體的redis cluster的搭建方案能夠參考官方的搭建方案。

redis的應用場景

file

一、最全頁面緩存

若是你使用的是服務器端內容渲染,你又不想爲每一個請求從新渲染每一個頁面,就可使用 Redis 把常被請求的內容緩存起來,可以大大的下降頁面請求的延遲。

2.排行榜/計數

Redis 基於內存,能夠很是快速高效的處理增長和減小的操做,相比於使用 SQL 請求的處理方式,性能的提高是很是巨大的。

Redis能夠實現快速計數、查詢緩存的功能,同時數據能夠異步落地到其餘數據源。

典型應用場景:

1)播放數計數的基礎組件,用戶每播放一次視頻,相應的視頻播放數就會自增1。

2)排行榜:按照時間、按照數量、按照得到的贊數等排行。

3. 共享Session

典型應用場景:用戶登錄信息,Redis將用戶的Session進行集中管理,每次用戶更新或查詢登錄信息都直接從Redis中集中獲取。

四、消息隊列

例如 email 的發送隊列、等待被其餘應用消費的數據隊列,Redis 能夠輕鬆而天然的建立出一個高效的隊列。

五、發佈/訂閱

pub/sub 是 Redis 內置的一個很是強大的特性,例如能夠建立一個實時的聊天系統、社交網絡中的通知觸發器等等。

相關文章
相關標籤/搜索