分区是指将将数据分别存储在不同 redis 节点,每个节点仅存储所有 key 的一部分。
使用分区的优势
- 可存储大量数据,不受单台服务器的物理内存限制
- 分流
缺点
- 涉及多个 key 的操作,若 key 在不同的节点上,则无法执行
- 分区是基于 key 的,若一个 key 中大量数据,它是无法分配到不同的节点
- 分区处理数据相对比较复杂,特别是处理 RDB/AOF 文件时
- 调整容量比较复杂,容量调整时需要实时平衡各个节点的数据
分区方式
redis 使用 hash 函数将 key 转换为一个数字,然后根据节点数量进行模运算,根据余数将其分配到指定的节点。
- hash 分配具有一致性,即同一个 key 计算出的 hash 值是固定的
- 客户端分区 有调用端选择正确的节点读写数据
- 代理服务分区 使用一个中间服务器,来转发请求
- 请求路由 随机请求一个服务器,由服务器确认数据在哪个节点,当数据请求到错误的节点时,自动转发请求到正确的节点
重分配
当需要新增或者移除节点时,redis 需要将 key 重新进行分配到剩余节点上。redis