redis-分区

分区是指将将数据分别存储在不同 redis 节点,每个节点仅存储所有 key 的一部分。

使用分区的优势

  • 可存储大量数据,不受单台服务器的物理内存限制
  • 分流

缺点

  • 涉及多个 key 的操作,若 key 在不同的节点上,则无法执行
  • 分区是基于 key 的,若一个 key 中大量数据,它是无法分配到不同的节点
  • 分区处理数据相对比较复杂,特别是处理 RDB/AOF 文件时
  • 调整容量比较复杂,容量调整时需要实时平衡各个节点的数据

分区方式

redis 使用 hash 函数将 key 转换为一个数字,然后根据节点数量进行模运算,根据余数将其分配到指定的节点。

  • hash 分配具有一致性,即同一个 key 计算出的 hash 值是固定的
  • 客户端分区 有调用端选择正确的节点读写数据
  • 代理服务分区 使用一个中间服务器,来转发请求
  • 请求路由 随机请求一个服务器,由服务器确认数据在哪个节点,当数据请求到错误的节点时,自动转发请求到正确的节点

重分配

当需要新增或者移除节点时,redis 需要将 key 重新进行分配到剩余节点上。redis