开发学院

您的位置:首页>教程>正文

教程正文

Redis 分区

Redis 分区

  分区是将数据分割成多个Redis实例的过程,因此每个实例只保存key的一个子集。

分区的好处

  它允许使用更大的数据库,通过利用多台计算机内存的和值。不使用分区,您将仅限于单个计算机可以支持的内存数量。

  它允许将计算能力扩展到多个核心和多个计算机,并允许将网络带宽扩展到多个计算机和网络适配器。

分区的缺点

  涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。

  不能使用涉及多个密钥的redis事务。

  当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。

  当使用分区时,数据处理更加复杂。例如,您必须处理多个RDB文件,并获取您的数据的备份,您需要从多个实例和主机聚合持久性文件。

  添加和删除容量可能很复杂。例如,Redis群集支持大多数透明的数据重新平衡,并能够在运行时添加和删除节点。但是,客户端分区和代理等其他系统不支持此功能。一种叫做presharding的技术对此是有帮助的。

分区类型

  在Redis中有两种分区可用。假设我们有四个Redis实例, R0、R1、R2、R3和类似user:1,user:2这样的表示用户的多个key等等。

范围分区

  最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的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实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。