Redis集群是Redis 3.0引入的高可用分布式解决方案,通过数据分片(sharding)和主从复制实现水平扩展和高可用。构建步骤:1.准备至少6个节点(3主3从);2.每个节点启动redis-server并配置cluster-enabled yes;3.使用redis-cli --cluster create命令创建集群;4.验证集群状态。实战技巧:监控slot分配均衡,避免热点key,使用hash_tag优化分片,结合哨兵或codis增强稳定性。应用场景:电商秒杀缓存、实时排行榜、会话存储、地理位置服务(GEO)。
一、Redis集群架构原理
Redis Cluster将数据分成16384个slot,每个节点负责一部分slot。客户端直接与节点通信,支持CRC16(key)%16384计算slot。主节点处理读写,从节点自动故障迁移。节点间通过gossip协议心跳检测,超过半数节点确认故障时触发failover。
Redis集群搭建实战
假设6个节点端口7000-7005:redis-server 7000.conf;重复启动所有节点。然后执行:redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1。检查:redis-cli -c -p 7000 cluster nodes。
集群应用场景
1.高并发缓存:如微博热搜榜单,每秒QPS百万级。2.分布式锁:Redlock算法实现。3.消息队列:基于List或Pub/Sub。4.地理位置:GEOADD、GEORADIUS查询附近门店。电商库存扣减场景:使用pipeline批量操作减少RTT。
实战技巧与优化
问题:key分布不均导致热点。用{tag}包裹key,如user:{1001}:info。迁移slot:cluster setslot/importing。扩容:添加节点后cluster meet,再用redis-trib add-node。监控:prometheus+Grafana采集cluster_info。
高可用实践
结合哨兵模式:主从+哨兵防脑裂。参数调优:cluster-node-timeout 15000,cluster-migration-barrier 2。故障恢复:手动reshard或自动failover。Docker部署:docker-compose up集群服务。
常见坑与解决方案
坑1:多key操作失败。用MGET前检查slot一致。坑2:节点下线频繁。调大timeout。坑3:大key阻塞。提前scan分拆。生产环境用Twemproxy或Codis代理平滑迁移。
FAQ
Q: Redis集群如何处理key的slot计算?
A: CRC16(key) % 16384确定slot,支持{hash_tag}自定义。
Q: 集群扩容会丢失数据吗?
A: 无损,使用add-node和reshard迁移slot。
Q: 单key大小限制?
A: 建议<256MB,避免阻塞。
Q: 如何监控集群健康?
A: cluster nodes命令或集成Prometheus。