浅谈Redis Cluster
数据分区 在介绍Redis Cluster之前,先简单介绍下分布式数据库的数据分区。所谓的数据分区就是将一个较大的数据集分布在不同的节点上进行储存。常见的数据分区方式:节点取余、一致性哈希、虚拟槽,下面我们来看下这几种分区方式。 节点取余 :根据key的hash值和节点数取模的方式计算出节点ID,然后向对应的节点提交数据,如下图所示。 对于这种分区方式,新增或者删除节点会造成大量的数据迁移。 假设数据集为1 2 3 … 10,那么数据分布应如下所示。 如果新增一个节点,那么数据分布会变成什么样子呢? 来看下结果对比:只有1 2 3还分布在原来的节点上,其余所有的数据都进行了迁移。在这种分区方式下,如果新增的节点时原来的节点的倍数时,迁移的节点数量量会少很多。 一致性哈希 :对于任何的哈希函数,都有其取值范围。我们可以用环形结构来标识范围。通过哈希函数,每个节点都会被分配到环上的一个位置,每个键值也会被映射到环上的一个位置,然后顺时针找到相邻的节点。如下图所示,例如key分布在range1内,那么数据存储在node2上。 对于这种分区方式,新增或者删除节点会造成数据分布不均匀。 假设数据集为1 2 3 … 12,数据范围也是1~12,那么数据分布应如下所示。 如果我们在node1和node2之间新增一个节点,那么数据分布应该变成什么样子呢? 可以看到,我们只是讲数据3进行了迁移