普通命令注意

  • 在使用 rename 命令的时候。由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性,这点不要忽视。rename = del (old key) + rename (newkey)
  • Redis 不支持二级数据结构(例如哈希、列表)内部元素的过期功能。
  • append、setrange等命令会造成内存预分配,导致内存占用增加一倍, 尽量用set

    集群redis-cluster功能限制

  • key批量操作支持有限,如mget和mset,目前只支持具有相同slot值的key批量操作。
  • key事务操作支持有限,只支持多key在同一节点上的事务操作,当多个key分布在不同的节点上时无法使用事务功能
  • key作为数据分区的最小粒度,不能将一个大的键值对象如hash、list映射到不同节点
  • 不支持多数据库,只能使用一个数据库空间,db0
  • 复制结构只支持一层, 即从节点只能复制主节点,不支持嵌套树状复制结构
  • 当节点通信失败时间大于cluster-node-time(默认15000 =15s)时,会被标记为主观下线, 被超过半数的节点标记为主观下线则进行客观下线。 但是cluster-node-time*2 的时间内,每个节点自己的下线报告如果没有得到更新,那么下线报告会被删除,即得不到超过半数节点的主观下线标记。
    所以cluster-node-time 不要设置的过小,否则主观下线的速度赶不上下线报告的过期速度, 故障节点将永远无法被标记为客观下线,导致故障转移失败。

    redis-cluster关键参数

  • cluster-require-full-coverage
    1
    2
    no  当主节点不可用时,只影响主节点上的槽使用,整个集群在故障发现到转移期间其他节点仍可用
    yes 主节点不可用时,整个集群在故障发现到转移期间不可用