最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis集群的相關詳解

 更新時間:2019年04月12日 14:32:06   作者:小白寫程序  
這篇文章主要介紹了Redis集群的相關,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

注意!要求使用的都是redis3.0以上的版本,因為3.0以上增加了redis集群的功能。

1.redis介紹

1.1什么是redis

Redis是用C語言開發(fā)的一個開源的高性能鍵值對(key-value)的非關系型數(shù)據(jù)庫。通過多種鍵值數(shù)據(jù)類型來適應不同場景下的存儲需求,目前支持的鍵值數(shù)據(jù)類型有:
字符串,散列,列表,集合,有序集合

2.2應用場景

緩存(數(shù)據(jù)查詢、短連接、新聞內(nèi)容、商品內(nèi)容等等)。(最多使用)
分布式集群架構中的session分離。
聊天室的在線好友列表。
任務隊列。(秒殺、搶購、12306等等)
應用排行榜。
網(wǎng)站訪問統(tǒng)計。
數(shù)據(jù)過期處理(可以精確到毫秒)

2.Redis集群的介紹

2.1Redis集群的架構

Redis 集群中內(nèi)置了 16384 個哈希槽,redis-cluster把所有的物理節(jié)點映射到[0-16383]slot上,cluster 負責維護。當需要在 Redis 集群中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,然后把結果對 16384 求余數(shù),這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據(jù)節(jié)點數(shù)量大致均等的將哈希槽映射到不同的節(jié)點

2.2 Redis集群的特點

當Redis集群啟動后,就自動在多個節(jié)點間做好分片,同時提供了分片之間的可用性:即當一部分redis節(jié)點故障或者網(wǎng)絡中斷后,集群還有從節(jié)點可以替代主節(jié)點繼續(xù)工作,但如果大面積的節(jié)點故障,那集群就不可用了。
Redis集群提供了:
自動將16384個數(shù)據(jù)槽點切分到多個Redis節(jié)點中
當一部分節(jié)點故障或不可達,集群依然能繼續(xù)工作

2.3 Redis集群的TCP端口

集群的每個節(jié)點都需要建立兩個TCP連接,監(jiān)聽這兩個端口:
客戶端端口(一般是6379):需要對所有客戶端和集群節(jié)點開放,用于接收客戶端指令,且集群節(jié)點需要通過該端口向客戶端轉(zhuǎn)移數(shù)據(jù)。
集群總線端口(一般是6379+10000):只需要對集群中的所有節(jié)點開放,用于節(jié)點之間通過二進制協(xié)議通信。各節(jié)點通過集群總線檢測故障節(jié)點,更新配置等,而客戶端是不能使用該端口的。

2.4 Redis集群數(shù)據(jù)的分片

Redis集群使用的是哈希槽,有16384個哈希槽,決定一個key分配到哪個槽的算法:計算該key的CRC16,結果再模16384.
集群中的每個節(jié)點負責一部分哈希槽,比如集群中有3個節(jié)點,則:

  1. 節(jié)點A存儲的哈希槽范圍是:0 – 5500
  2. 節(jié)點B存儲的哈希槽范圍是:5501 – 11000
  3. 節(jié)點C存儲的哈希槽范圍是:11001 – 16384

這樣的分布方式方便節(jié)點的添加和刪除。比如,需要新增一個節(jié)點D,只需要把A、B、C中的部分哈希槽數(shù)據(jù)移到D節(jié)點。同樣,如果希望在集群中刪除A節(jié)點,只需要把A節(jié)點的哈希槽的數(shù)據(jù)移到B和C節(jié)點,當A節(jié)點的數(shù)據(jù)全部被移走后,A節(jié)點就可以完全從集群中刪除。

因為把哈希槽從一個節(jié)點移到另一個節(jié)點是不需要停機的,所以,增加或刪除節(jié)點,或更改節(jié)點上的哈希槽,也是不需要停機的。

如果多個key都屬于一個哈希槽,集群支持通過一個命令(或事務, 或lua腳本)同時操作這些key。通過“哈希標簽”的概念,用戶可以讓多個key分配到同一個哈希槽。如果key含有大括號”{}”,則只有大括號中的字符串會參與哈希,比如”this{foo}”和”another{foo}”這2個key會分配到同一個哈希槽,所以可以在一個命令中同時操作他們。

2.5 Redis集群的主從模式

每個哈希槽都有一個主節(jié)點和多個從節(jié)點。
舉例:如果有六個節(jié)點,則分A,B,C三個為主節(jié)點,A1,B1,C1三個為對應的從節(jié)點,當A發(fā)生故障后,集群會提升A1為主節(jié)點,A1會繼承A節(jié)點的數(shù)據(jù),其實A1就相當于A的一個副本,讓集群繼續(xù)工作。

2.5.1 redis-cluster投票:容錯

(1)投票過程是集群中所有主節(jié)點參與,如果半數(shù)以上主節(jié)點與故障主節(jié)點通信超過(cluster-node-timeout),認為當前該主節(jié)點掛掉.
(2):什么時候整個集群不可用(cluster_state:fail)?
a:如果集群任意主節(jié)點掛掉,且沒有從節(jié)點.集群進入fail狀態(tài),也可以理解成集群的slot映射[0-16383]不完成時進入fail狀態(tài).
b:如果集群超過半數(shù)以上主節(jié)點掛掉,無論是否有從節(jié)點,集群都進入fail狀態(tài).
ps:當集群不可用時,所有對集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤。

2.6 Redis集群的一致性保證

Redis集群不能保證強一致性。一些已經(jīng)向客戶端確認寫成功的操作,會在某些不確定的情況下丟失。

產(chǎn)生寫操作丟失的第一個原因,是因為主從節(jié)點之間使用了異步的方式來同步數(shù)據(jù)。

一個寫操作是這樣一個流程:

  1. 1)客戶端向主節(jié)點B發(fā)起寫的操作
  2. 2)主節(jié)點B回應客戶端寫操作成功
  3. 3)主節(jié)點B向它的從節(jié)點B1,B2,B3同步該寫操作

從上面的流程可以看出來,主節(jié)點B并沒有等從節(jié)點B1,B2,B3寫完之后再回復客戶端這次操作的結果。所以,如果主節(jié)點B在通知客戶端寫操作成功之后,但同步給從節(jié)點之前,主節(jié)點B故障了,其中一個沒有收到該寫操作的從節(jié)點會晉升成主節(jié)點,該寫操作就這樣永遠丟失了。

節(jié)點超時(node timeout):對集群來說非常重要,當達到了這個節(jié)點超時的時間之后,主節(jié)點被認為已經(jīng)宕機,可以用它的一個從節(jié)點來代替。同樣,在節(jié)點超時時,如果主節(jié)點依然不能聯(lián)系到其他主節(jié)點,它將進入錯誤狀態(tài),不再接受寫操作。

2.7 Redis集群的參數(shù)配置

在redis.conf中的一些參數(shù)說明:

cluster-enabled <yes/no>:
如果配置”yes”則開啟集群功能,此redis實例作為集群的一個節(jié)點,否則,它是一個普通的單一的redis實例。

cluster-config-file :
注意:雖然此配置的名字叫“集群配置文件”,但是此配置文件不能人工編輯,它是集群節(jié)點自動維護的文件,主要用于記錄集群中有哪些節(jié)點、他們的狀態(tài)以及一些持久化參數(shù)等,方便在重啟時恢復這些狀態(tài)。通常是在收到請求之后這個文件就會被更新。

cluster-node-timeout :
這是集群中的節(jié)點能夠失聯(lián)的最大時間,超過這個時間,該節(jié)點就會被認為故障。如果主節(jié)點超過這個時間還是不可達,則用它的從節(jié)點將啟動故障遷移,升級成主節(jié)點。注意,任何一個節(jié)點在這個時間之內(nèi)如果還是沒有連上大部分的主節(jié)點,則此節(jié)點將停止接收任何請求。

cluster-slave-validity-factor :
如果設置成0,則無論從節(jié)點與主節(jié)點失聯(lián)多久,從節(jié)點都會嘗試升級成主節(jié)點。如果設置成正數(shù),則cluster-node-timeout乘以cluster-slave-validity-factor得到的時間,是從節(jié)點與主節(jié)點失聯(lián)后,此從節(jié)點數(shù)據(jù)有效的最長時間,超過這個時間,從節(jié)點不會啟動故障遷移。假設cluster-node-timeout=5,cluster-slave-validity-factor=10,則如果從節(jié)點跟主節(jié)點失聯(lián)超過50秒,此從節(jié)點不能成為主節(jié)點。注意,如果此參數(shù)配置為非0,將可能出現(xiàn)由于某主節(jié)點失聯(lián)卻沒有從節(jié)點能頂上的情況,從而導致集群不能正常工作,在這種情況下,只有等到原來的主節(jié)點重新回歸到集群,集群才恢復運作。

cluster-migration-barrier
:主節(jié)點需要的最小從節(jié)點數(shù),只有達到這個數(shù),主節(jié)點失敗時,它從節(jié)點才會進行遷移。更詳細介紹可以看本教程后面關于副本遷移到部分。

cluster-require-full-coverage
<yes/no>:在部分key所在的節(jié)點不可用時,如果此參數(shù)設置為”yes”(默認值),
則整個集群停止接受操作;如果此參數(shù)設置為”no”,則集群依然為可達節(jié)點上的key提供讀操作。

以上所述是小編給大家介紹的Redis集群的相關詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • redis搭建哨兵集群的實現(xiàn)步驟

    redis搭建哨兵集群的實現(xiàn)步驟

    本文主要介紹了redis搭建哨兵集群的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Redis 數(shù)據(jù)遷移的項目實踐

    Redis 數(shù)據(jù)遷移的項目實踐

    本文主要介紹了Redis 數(shù)據(jù)遷移的項目實踐,通過Redis-shake的sync(同步)模式,可以將Redis的數(shù)據(jù)實時遷移至另一套Redis環(huán)境,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 詳解如何使用Redis實現(xiàn)分布式鎖

    詳解如何使用Redis實現(xiàn)分布式鎖

    Redis 作為一個獨立的三方系統(tǒng),其天生的優(yōu)勢就是可以作為一個分布式系統(tǒng)來使用,因此使用 Redis 實現(xiàn)的鎖都是分布式鎖,所以本文就給大家講講如何使用Redis實現(xiàn)分布式鎖,感興趣的小伙伴跟著小編來看看吧
    2023-08-08
  • Redis實現(xiàn)登錄注冊的示例代碼

    Redis實現(xiàn)登錄注冊的示例代碼

    本文主要介紹了Redis實現(xiàn)登錄注冊的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Redis不使用 keys 命令獲取鍵值信息的方法

    Redis不使用 keys 命令獲取鍵值信息的方法

    這篇文章主要介紹了Redis 不使用 keys 命令獲取鍵值信息的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-08-08
  • redis中List列表常見命令及使用場景

    redis中List列表常見命令及使用場景

    這篇文章主要給大家介紹了關于redis中List列表常見命令及使用場景的相關資料,Redis列表是簡單的字符串列表,按照插入順序排序,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Redis?緩存淘汰策略和事務實現(xiàn)樂觀鎖詳情

    Redis?緩存淘汰策略和事務實現(xiàn)樂觀鎖詳情

    這篇文章主要介紹了Redis緩存淘汰策略和事務實現(xiàn)樂觀鎖詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • redis的hash類型操作方法

    redis的hash類型操作方法

    Hash 是一個 String 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用于存儲對象,這篇文章主要介紹了redis的hash類型的詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • mac下redis安裝、設置、啟動停止方法詳解

    mac下redis安裝、設置、啟動停止方法詳解

    這篇文章主要介紹了mac下redis安裝、設置、啟動停止方法詳解,需要的朋友可以參考下
    2020-02-02
  • redis在php中常用的語法【推薦】

    redis在php中常用的語法【推薦】

    string是redis最基本的類型,而且string類型是二進制安全的。這篇文章主要介紹了redis在php中常用的語法,需要的朋友可以參考下
    2018-08-08

最新評論

兴城市| 浦北县| 麻城市| 西华县| 金溪县| 梓潼县| 镇宁| 大名县| 景德镇市| 图木舒克市| 屯门区| 永昌县| 白沙| 都江堰市| 德阳市| 随州市| 永修县| 磐安县| 尖扎县| 阿瓦提县| 搜索| 于田县| 乐山市| 老河口市| 长春市| 荥经县| 黄石市| 南投县| 永泰县| 红桥区| 彭山县| 辛集市| 柘城县| 晋州市| 云霄县| 横山县| 宜阳县| 黔江区| 阜平县| 虎林市| 大埔县|