redis
数据量大的时候就需要使用多个redis
实例去共同存储数据。
固定取模
- 先把
redis
若干个主节点编号
Master1 : 1
Master2 : 2, 3
Master3 : 4, 5
- 再用hash值和编号总数量取模
hash(key) % total_virtual_weight
- 缺点:当新增或者删除节点时,数据几乎全部都要重新洗牌。消耗过大,只能当做缓存
一致性哈希Consistent Hashing
- 假设有一个HSAH环,范围为2^32-1(即一个32位的无符号整形范围)
- 计算集群节点的HASH(通过ip,主机名之类的),并标记在HASH环上
- 客户端请求数据时会通过数据的HASH值向后找,找到的第一个节点处理此请求
- 优点:相对于固定取模,删除节点或节点宕机所影响的数据更少。
- 缺点: 删除节点时还是需要计算所有该节点的key,另外算出来的节点Hash值也可能导致数据分布不均匀的现象。
预先分配PreSharding
- 部署
redis
时一个机器上部署多个实例
- 需要拓展时将一台机器上的实例分发到多台机器上,以提升性能与空间
- 优点:增长过程中
redis
的实例数保持不变
- 缺点:实例多,增加了运维成本
网友评论