Redis 核心原理与高可用架构实践

Redis 核心原理与高可用架构实践 一、Redis 概述1. 特点高性能10万~100万 QPS微秒级响应丰富数据结构String、Hash、List、Set、Sorted Set原子操作单命令原子性支持事务MULTI/EXEC持久化RDB 快照 AOF 日志主从复制、哨兵、集群Cluster高可用方案2. 优势基于内存C语言实现单线程模型6.0前 IO多路复用epoll支持多种编程语言客户端功能丰富Lua脚本、发布订阅、Pipeline、Key过期等二、数据类型及常用命令1. StringSET key value [EX seconds] [NX|XX]GET keyINCR / DECR原子计数器MSET / MGET批量操作SETNX分布式锁基础2. ListLPUSH / RPUSH左/右插入LPOP / RPOP左/右弹出LRANGE key start stop范围查询BLPOP / BRPOP阻塞式弹出3. SetSADD key member添加SMEMBERS key查看全部SINTER / SUNION / SDIFF交集/并集/差集4. Sorted SetZSetZADD key score member添加带分值元素ZRANGE / ZREVRANGE按分数升/降序获取ZRANK排名、ZSCORE获取分数5. HashHSET key field value/HGET key fieldHMSET / HMGET批量HGETALL获取所有字段及值HDEL删除字段三、高级特性1. 管道Pipeline将多个命令打包一次发送减少 RTT适用场景批量操作网络延迟高时效果显著2. 发布/订阅Pub/SubSUBSCRIBE channel/PUBLISH channel messagePSUBSCRIBE pattern模式订阅消息即发即弃无持久化3. 事务MULTI开启EXEC执行DISCARD取消不支持回滚但保证命令顺序执行4. Lua 脚本原子性执行多个操作EVAL script numkeys key [key ...] arg [arg ...]四、持久化1. RDB快照触发方式save阻塞、bgsavefork子进程配置save 900 1等优点恢复快文件紧凑缺点可能丢失最后一次快照后的数据2. AOF追加日志记录每个写命令重启时重放策略always/everysec/no重写bgrewriteaof或自动触发auto-aof-rewrite-percentage优点数据更安全最多丢1秒数据缺点文件大恢复慢3. 混合持久化RDBAOFAOF 文件以 RDB 格式开头 增量命令快速恢复 数据安全五、主从复制1. 概念一个 Master 多个 Slave数据单向同步Master 可读写Slave 只读2. 配置replicaof master_ip master_portinfo replication查看状态3. 同步流程Slave 发送SYNC/PSYNCMaster 生成 RDB 并发送后续增量命令持续同步六、哨兵模式Sentinel1. 作用监控主从健康自动故障转移提供主节点地址给客户端2. 核心配置sentinel monitor mymaster 192.168.108.10 6379 2 sentinel down-after-milliseconds mymaster 300003. 故障转移流程主观下线SDOWN客观下线ODOWN多数哨兵确认选举 Leader提升最优 Slave 为新 Master更新其他 Slave 复制目标七、Redis Cluster集群1. 特点无中心架构数据分片16384 个哈希槽每个 Master 负责一部分槽可配 Slave自动故障转移无需 Sentinel2. 数据映射HASH_SLOT CRC16(key) mod 163843. 搭建要点至少 3 主 3 从配置cluster-enabled yes创建集群redis-cli --cluster create ip:port ... --cluster-replicas 14. 故障转移主节点宕机其 Slave 自动选举为新 Master集群状态变为ok需大部分槽可用八、缓存典型问题问题定义解决方案雪崩大量 Key 同时过期或 Redis 宕机过期时间加随机值高可用集群限流熔断多级缓存穿透查询不存在的数据缓存DB 都无缓存空值短 TTL布隆过滤器击穿热点 Key 过期大量并发打到 DB互斥锁永不过期后台异步更新九、常用管理命令命令说明INFO [section]查看服务器信息CONFIG GET/SET parameter动态修改配置部分参数SLOWLOG GET/LEN/RESET慢查询日志KEYS pattern查找 Key生产慎用阻塞DBSIZE当前库 Key 数量FLUSHDB / FLUSHALL清空当前/所有库建议禁用EXPIRE / TTL设置/查看过期时间SELECT dbindex切换数据库Cluster 不支持十、性能与安全建议避免使用KEYS *改用SCAN游标迭代设置rename-command FLUSHALL 等禁用危险命令使用requirepass设置密码生产环境开启protected-mode yes并绑定内网 IP合理设置maxmemory及淘汰策略如allkeys-lru大 Key 拆分避免慢操作