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