Redis 分區
分區是分割數據到多個Redis實例的處理過程,所以每一個實例只保存key的一個子集。redis
分區的優點
- 經過利用多臺計算機內存的和值,容許咱們構造更大的數據庫。
- 經過多核和多臺計算機,容許咱們擴展計算能力;經過多臺計算機和網絡適配器,容許咱們擴展網絡帶寬。
分區的不足
redis的一些特性在分區方面表現的不是很好:數據庫
- 涉及多個key的操做一般是不被支持的。舉例來講,當兩個set映射到不一樣的redis實例上時,你就不能對這兩個set執行交集操做。
- 涉及多個key的redis事務不能使用。
- 當使用分區時,數據處理較爲複雜,好比你須要處理多個rdb/aof文件,而且從多個實例和主機備份持久化文件。
- 增長或刪除容量也比較複雜。redis集羣大多數支持在運行時增長、刪除節點的透明數據平衡的能力,可是相似於客戶端分區、代理等其餘系統則不支持這項特性。然而,一種叫作presharding的技術對此是有幫助的。
分區類型
Redis 有兩種類型分區。 假設有4個Redis實例 R0,R1,R2,R3,和相似user:1,user:2這樣的表示用戶的多個key,對既定的key有多種不一樣方式來選擇這個key存放在哪一個實例中。也就是說,有不一樣的系統來映射某個key到某個Redis服務。編程
範圍分區
最簡單的分區方式是按範圍分區,就是映射必定範圍的對象到特定的Redis實例。網絡
好比,ID從0到10000的用戶會保存到實例R0,ID從10001到 20000的用戶會保存到R1,以此類推。編程語言
這種方式是可行的,而且在實際中使用,不足就是要有一個區間範圍到實例的映射表。這個表要被管理,同時還須要各 種對象的映射表,一般對Redis來講並不是是好的方法。函數
哈希分區
另一種分區方法是hash分區。這對任何key都適用,也無需是object_name:這種形式,像下面描述的同樣簡單:代理
- 用一個hash函數將key轉換爲一個數字,好比使用crc32 hash函數。對key foobar執行crc32(foobar)會輸出相似93024922的整數。
- 對這個整數取模,將其轉化爲0-3之間的數字,就能夠將這個整數映射到4個Redis實例中的一個了。93024922 % 4 = 2,就是說key foobar應該被存到R2實例中。注意:取模操做是取除的餘數,一般在多種編程語言中用%操做符實現。