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}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!