【Redis】主從、哨兵、集群 -- ,五種數據類型


【Redis】主從、哨兵、集群各自架構的優點和缺點對比

1. 單機模式

Redis 單副本,采用單個 Redis 節點部署架構,沒有備用節點實時同步數據,不提供數據持久化和備份策略,適用於數據可靠性要求不高的純緩存業務場景。

優點:

架構簡單,部署方便。
高性價比:緩存使用時無需備用節點(單實例可用性可以用 supervisor 或 crontab 保證),當然為了滿足業務的高可用性,也可以犧牲一個備用節點,但同時刻只有一個實例對外提供服務。
高性能。
缺點:

不保證數據的可靠性。
在緩存使用,進程重啟后,數據丟失,即使有備用的節點解決高可用性,但是仍然不能解決緩存預熱問題,因此不適用於數據可靠性要求高的業務。
高性能受限於單核 CPU 的處理能力(Redis 是單線程機制),CPU 為主要瓶頸,所以適合操作命令簡單,排序、計算較少的場景。也可以考慮用 Memcached 替代。
2. 主從架構
主(master)和 從(slave)部署在不同的服務器上,當主節點服務器寫入數據時會同步到從節點的服務器上,一般主節點負責寫入數據,從節點負責讀取數據。

從節點設置只讀屬性,而主節點沒有只寫屬性,因此,主節點可讀可以寫

優點:

讀寫分離,提高效率
主節點負責寫操作,從節點負責讀操作;如果寫少讀多場景,配置多個從節點的話,效率非常高
數據熱備份,提供多個副本。
從節點宕機,影響較小
缺點:

主節點故障,集群則無法進行工作,可用性比較低,從節點升主節點需要人工手動干預。

因為只有主節點能進行寫操作,一旦主節點宕機,整個服務就無法使用。當然此時從節點仍可以進行讀操作,但是對於整個服務流程來說,是無法使用的。

Master的寫的壓力難以降低。

如果寫操作比較多,那么只有一個主節點的話,無法分擔壓力。

主節點存儲能力受到單擊限制。

主節點只能有一個,因此單節點內存大小不會太大,因此存儲數據量受限。

主從數據同步,可能產生部分的性能影響甚至同步風暴。

風暴問題,對於任何集群分布式來說都存在,要合理分布節點。

3. 哨兵
為了解決這兩個問題,在2.8版本之后redis正式提供了sentinel架構。


在redis3.0以前的版本要實現集群一般是借助哨兵sentinel工具來監控master節點的狀態。

如果master節點異常,則會做主從切換,將某一台slave作為master,哨兵的配置略微復雜,並且性能和高可用性等各方面表現一般。

優點:

對節點進行監控,來完成自動的故障發現與轉移
缺點:

特別是在主從切換的瞬間存在訪問瞬斷的情況,等待時間比較長,至少十來秒不可用。
哨兵模式只有一個主節點對外提供服務,沒法支持很高的並發
單個主節點內存也不宜設置得過大,否則會導致持久化文件過大,影響數據恢復或主從同步的效率。
與主從相比,哨兵僅解決了手動切換主從節點問題,至於其他的問題,基本上仍然存在。

哨兵的主要問題還是由於中心架構,僅存在一個master節點引起的,寫的效率太低。

4. 集群模式
Redis Cluster 是 3.0 版后推出的 Redis 分布式集群解決方案,主要解決 Redis 分布式方面的需求,比如,當遇到單機內存,並發和流量等瓶頸的時候,Redis Cluster 能起到很好的負載均衡的目的。

Redis Cluster 集群節點最小配置 6 個節點以上(3 主 3 從),其中主節點提供讀寫操作,從節點作為備用節點,不提供請求,只作為故障轉移使用。Redis Cluster 采用虛擬槽分區,所有的鍵根據哈希函數映射到 0~16383 個整數槽內,每個節點負責維護一部分槽以及槽所印映射的鍵值數據。

注意:集群模式下 從節點不提供讀寫,與主從模式不一樣。 總結一下經驗,分布式 場景下:集群模式一般從節點不參與讀寫,僅作為備用節點。而主從一般都要負責讀或寫,都要參與具體的工作。

優點:

無中心架構。

即有多個master節點,不像哨兵模式下僅有一個。這樣寫的壓力就可以分散了;並且存儲量也可以擴展了,因為多個主節點都可以存儲一部分數據,總量要遠大於單主節點架構。


數據按照 slot 存儲分布在多個節點,節點間數據共享,可動態調整數據分布。

可擴展性:可線性擴展到 1000 多個節點,節點可動態添加或刪除。

高可用性:部分節點不可用時,集群仍可用。通過增加 Slave 做 standby 數據副本,能夠 實現故障自動 failover,節點之間通過 gossip 協議交換狀態信息,用投票機制完成 Slave 到 Master 的角色提升。

當然,如果某個槽歸屬的小群內都不可用時,整個服務仍然是不可用的!通過cluster-require-full-coverageyes 控制該特性, 默認yes 即需要集群完整,方可對外提供服務,設置為no ,其他的小集群仍然可以對外提供服務。

缺點:

如果主節點A和它的從節點A1都宕機了,那么該集群就無法再提供服務了。
 

五種數據類型

  • String(字符串,整數,浮點數):做簡單的鍵值對緩存
  • List(列表):儲存一些列表類型的數據結構
  • Set(無序集合):交集,並集,差集的操作
  • Hash(包含鍵值對的無序散列表):結構化的數據
  • Zset(有序集合)(Sorted sets):去重同時也可以排序,

string的應用場景

​ 普通的key-value鍵值對都可以用string來保存,

​ 1,訪問量統計,每次訪問博客和文章的,都用intr命令加一

​ 2,做緩存。

list的應用場景

​ 作為隊列,list的兩端操作比較方便,所以可以用來一些需要獲取最新數據的場景。比如新聞類應用的最新新聞。

hash的應用場景

​ 用來儲存,修改對象屬性,如果說用戶(name,age,like),文章(標題,time,作者,內容,),其中用戶相當於key,而(name,age,;like)相當於vlaue

set的應用場景

​ 1,好友推薦,根據set的內容交集,大於每個值就可以推薦,

​ 2,利用set的唯一性,統計網站內容所有獨立ip

zset的應用場景

​ 排行榜,因為zset時有序的

在程序中Redis的數據類型分別有什么作用

String:緩存,限流,計數器,分布式鎖,分布式Session
Hash:儲存用戶信息,用戶主頁訪問量,組合查詢
List:微博關注人時間軸列表,簡單隊列
Set:贊,踩,標簽,好友關系
Zset:排行榜

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM