English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Redis 分区

Sektoren sind der Prozess der Aufteilung von Daten in mehrere Redis-Beispiel, daher speichert jeder Beispiel nur eine Teilmenge von keys.

Die Vorteile der Sektoren

  • Durch die Nutzung der Summe der Speicherkapazität mehrerer Computer können wir größere Datenbanken konstruieren.

  • Durch die Nutzung mehrerer Kerne und Computer können wir die Rechenleistung erweitern; durch mehrere Computer und Netzwerkadapter können wir die Bandbreite erweitern.

Die Schwächen der Sektoren

Einige Funktionen von Redis sind in Bezug auf Sektoren nicht sehr gut.

  • Operationen, die mehrere keys betreffen, werden in der Regel nicht unterstützt. Zum Beispiel können Sie keine Schnittoperationen für zwei verschiedene Redis-Beispiel ausführen, wenn zwei Sets auf verschiedene Redis-Beispiel gemappt sind.

  • Transaktionen, die mehrere keys betreffen, können nicht verwendet werden.

  • Wenn Sektoren verwendet werden, ist die Datenverarbeitung relativ komplex, z.B. müssen Sie mehrere rdb verarbeiten./aof-Datei und aus mehreren Beispielen und Host-Backups.

  • Die Erhöhung oder das Entfernen von Kapazität ist ebenfalls komplex. Die meisten Redis-Clustern unterstützen die Fähigkeit, Knoten transparent zu balancieren, während sie im Betrieb hinzugefügt oder entfernt werden, aber andere Systeme wie Client-Sektoren und Proxy unterstützen diese Funktion nicht. Allerdings hilft eine Technik namens presharding dabei.

分区类型

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示例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。