redis之集羣

Redis集羣

集羣技術是構建高性能網站架構的重要手段,試想在網站承受高併發訪問壓力的同時,還需要從海量數據中查詢出滿足條件的數據,並快速響應,我們必然想到的是將數據進行切片把數據根據某種規則放入多個不同的服務器節點,來降低單節點服務器的壓力

集羣要實現的目的是要將不同的 key 分散放置到不同的 redis 節點,這裏我們需要一個規則或者算法,通常的做法是獲取 key 的哈希值,然後根據節點數來求模,但這種做法有其明顯的弊端,當我們需要增加或減少一個節點時,會造成大量的 key 無法命中,這種比例是相當高的,所以就有人提出了一致性哈希的概念。

一致性哈希

1.      均衡性:也有人把它定義爲平衡性,是指哈希的結果能夠儘可能分佈到所有的節點中去,這樣可以有效的利用每個節點上的資源。

2.      單調性:對於單調性有很多翻譯讓我非常的不解,而我想要的是當節點數量變化時哈希的結果應儘可能的保護已分配的內容不會被重新分派到新的節點。

3.      分散性和負載:這兩個其實是差不多的意思,就是要求一致性哈希算法對 key 哈希應儘可能的避免重複。

哈希槽(hash slot

Redis 集羣中內置了 16384 個哈希槽,當需要在 Redis 集羣中放置一個key-value 時,redis 先對key 使用 crc16 算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點。

Redis持久化

Redis持久化方式:快照RDB文件)和追加式文件AOF文件)

1. RDB持久化方式會在一個特定的間隔保存那個時間點的一個數據快照。

2. AOF持久化方式則會記錄每一個服務器收到的寫操作。在服務啓動時,這些記錄的操作會逐條執行從而重建出原來的數據。寫操作命令記錄的格式跟Redis協議一致,以追加的方式進行保存。

補充:Redis的存儲分爲內存存儲磁盤存儲log文件三部分,配置文件中有三個參數對其進行配置。

1. save seconds updates:在指定時間內,達到多少次更新操作時,就將數據同步到數據文件。這個可以多個條件配合,比如默認配置文件中的設置,就設置了三個條件。

2. appendonly yes/no:是否在每次更新操作後進行日誌記錄,如果不開啓,可能會在斷電時導致一段時間內的數據丟失。因爲redis本身同步數據文件是按上面的save條件來同步的,所以有的數據會在一段時間內只存在於內存中。

3. appendfsyncno/always/everysec:no表示等操作系統進行數據緩存同步到磁盤,always表示每次更新操作後手動調用fsync()將數據寫到磁盤,everysec表示每秒同步一次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章