分區(qū)是將數(shù)據(jù)拆分為多個Redis實例的過程,因此每個實例只包含一部分鍵。
分區(qū)的優(yōu)點
- 它允許更大的數(shù)據(jù)庫,使用更多計算機的內(nèi)存總和。如果沒有分區(qū),則限制為單個計算機可以支持的內(nèi)存量。
- 它允許將計算能力擴展到多個核心和多個計算機,并將網(wǎng)絡(luò)帶寬擴展到多個計算機和網(wǎng)絡(luò)適配器。
分區(qū)的缺點
- 通常不支持涉及多個鍵的操作。 例如,如果兩個集合存儲在映射到不同Redis實例的鍵中,則不能執(zhí)行兩個集合之間的交集操作。
- 不能使用涉及多個鍵的Redis事務。
- 分區(qū)粒度是關(guān)鍵,因此不可能使用單個巨大的鍵(如非常大的排序集合)來分割數(shù)據(jù)集。
- 使用分區(qū)時,數(shù)據(jù)處理更復雜。 例如,必須處理多個RDB/AOF文件,并獲得數(shù)據(jù)的備份,您需要聚合來自多個實例和主機的持久性文件。
- 添加和刪除容量可能很復雜。 例如,Redis Cluster支持大多數(shù)透明的數(shù)據(jù)重新平衡,具有在運行時添加和刪除節(jié)點的能力。但是,其他系統(tǒng)(如客戶端分區(qū)和代理)不支持此功能。但可以使用一種叫作Presharding的技術(shù)來處理這方面的問題。
分區(qū)類型
Redis中有兩種類型的分區(qū)。假設(shè)有四個Redis實例:R0
,R1
,R2
,R3
以許多代表用戶的鍵,如user:1
,user:2
,…等等。
范圍分區(qū)
范圍分區(qū)通過將對象的范圍映射到特定的Redis實例來實現(xiàn)。假設(shè)在上面示例中,從ID 0到ID 10000的用戶將進入實例R0
,而從ID 10001到ID 20000的用戶將進入實例R1
,以此類推。
哈希分區(qū)
在這種類型的分區(qū)中,使用散列函數(shù)(例如,模函數(shù))將鍵轉(zhuǎn)換成數(shù)字,然后將數(shù)據(jù)存儲在不同的Redis實例中。