Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。
节点通过握手将其它节点添加到自己所在的集群。
集群中的16384个槽可以分别指派给集群中的各个节点,每个节点都会记录哪些槽指派给了具体哪个节点。
节点在收到客户端命令请求时,会先检查这个命令请求处理的键所在的槽是否由自己负责,如果不是的话,节点将向客户端返回一个moved错误,moved错误携带的信息可以指引客户端转向正在负责相关槽的节点。
对Redis集群重新分片工作是由redis-trib负责执行的,重新分片的关键时将属于某个槽的所有键值对从一个节点转移到另一个节点。
如果节点A正在迁移槽i至节点B,那么当节点A没能在自己的数据库中找到命令指定的数据库键时,节点A会向客户端返回一个ASK错误,指引客户端到节点B继续查找指定的数据库键。
集群里的从节点用于复制主节点,不处理命令请求,并在主节点下线时,通过故障转移操作后,升级为新的主节点处理命令请求。
客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
节点的fail是通过集群中超过半数的节点检测失效时才生效。
不支持多数据空间。单机下的Redis可以支持16个数据库,集群模式下只能使用一个数据库空间,即db0.
复制结构值支持一层,从节点只能复制主节点,不支持嵌套复制结构
Key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的key执行批量操作
key事务操作支持有限。同理只支持多key在统一节点上的事务操作,当多个key分布在不同的节点上时无法使用事务功能
原文:https://www.cnblogs.com/jasonbourne3/p/14099778.html