redis集群

集群:支持多个master,一个master挂载多个slave

cluster自带了sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能

客户端不再需要连接所有节点,只需连接一个可用节点

槽位slot负责分配各个物理节点,对应的节点来维护节点,插槽,数据之间的关系

集群算法--分片--槽位slot

redis没有使用一致性hash,而是引入了hash槽。有16384个槽位,不过不建议过1000个节点

分片是什么?

使用redis集群的时候,我们会讲存储的数据分散到多台redis机器上,称之为分片。集群中的每个redis实例都被认为是整个数据的一个分片

分片方便扩容缩减和数据查找

妈的这个篇章听得迷迷糊糊的,分片用的算法用哈希槽

集群的创建

1.模拟情况下启动三主三从

cluster-enable yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000

2.通过redis-cli -a 111111 --cluster create --cluster-replicas 1 [ip:port]    //--cluster-replicas 1表示每个master创建一个slave节点

cluster nodes可以查看所有槽信息

3.读写操作:因为加入了哈希槽的原因,如果不进行路由到位会引起你在某一master上不能进行部分读写问题,他会报错提示,原因是你想要读写的key经过哈希槽的算法后得到的槽位不属于这个master所分配的位置。解决的办法是启动的时候再在结尾上加上-C ,下次存储的时候会自动写入重定向并提示

  如何查看key属于哪个槽位? cluster keyslot key

4.如果主库挂了,这时从库会顶上并成为master,但是这样会导致结构混乱,为了解决这一问题。需要主从互换,输入cluster failover

集群的扩容

5.如何新增节点?通过redis-cli -a 111111 --cluster add-node IP:port IP:port //注意后面的ip:port是原集群已有的,需要由他来“引进”新的节点

6.新增节点之后需要重新分配槽位:redis-cli -a 111111 --cluster reshared ip:port

7.为新增节点新增slave:redis-cli -a 111111 --cluster add-node newip:newport --cluster-slave --cluster-master-id masterId(masterId通过cluster nodes查)

集群的缩容

8.查询slave节点ID:redis-cli -a 111111 --cluster check ip:port

9.删除节点:redis-cli -a 111111 --cluster del-node ip:port id

10.归还要删除master的哈希槽:redis-cli -a 111111 --cluster reshared ip:port

11.删除节点:redis-cli -a 111111 --cluster del-node ip:port id

集群的读取

1.mget k1 k2 k3如果这些键不在同一个槽内会报错,为此引入了通识符,mset k1{z} z1 k2{z} z2 k3{z} z3 | mget k1{z} k2{z} k3{z}

posted @   天启A  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示