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

Redis 分区

Il partitioning è il processo di dividere i dati in multipli esempi Redis, quindi ogni esempio memorizza solo una sottosessione di key.

Vantaggi del partitioning

  • Utilizzando la somma della memoria di multipli computer, ci permettiamo di costruire database più grandi.

  • Utilizzando multipli core e computer, ci permettiamo di espandere la capacità di calcolo; utilizzando multipli computer e adattatori di rete, ci permettiamo di espandere la larghezza di banda di rete.

Insufficienze del partitioning

Alcune caratteristiche di Redis non si comportano bene nel partitioning:

  • Le operazioni che coinvolgono più key sono generalmente non supportate. Ad esempio, quando due set sono mappati su diversi esempi Redis, non è possibile eseguire l'operazione di intersezione su questi due set.

  • Non è possibile utilizzare transazioni Redis che coinvolgono più key.

  • Quando si utilizza il partitioning, il trattamento dei dati è più complesso, ad esempio, è necessario gestire molti file rdb/aof e备份持久化文件 da molti esempi e host.

  • Aggiungere o eliminare capacità è anche complesso. La maggior parte dei cluster Redis supporta la capacità di bilanciamento dati trasparente durante l'esecuzione per aggiungere o rimuovere nodi, ma sistemi come il partitioning client, proxy e altri non supportano questa funzionalità. Tuttavia, una tecnologia chiamata presharding può essere utile.

Tipo di partitione

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