超详细Redis7.X 安装教程 知识体系总览一、Redis 单机部署✅1. 检查安装 gcc 环境✅2. 下载安装 Redis✅3. 启动 Redis✅4. 配置 Redis✅5. 退出 / 关闭 Redis二、主从部署Master-Slave Replication✅1. 主从复制的作用✅2. 主从复制部署✅3. 主从复制缺点三、哨兵部署Sentinel✅1. 哨兵模式的原理✅2. 哨兵选举与故障转移流程✅3. 客观下线机制✅4. 哨兵模式部署✅5. 哨兵使用建议✅6. 哨兵模式并不能保证数据零丢失四、集群部署Cluster✅1. Redis 集群的作用✅2. Redis 集群的数据分片哈希槽✅3. 集群环境搭建✅4. 集群数据读写✅5. 模拟故障转移五、附录完整配置文件与命令汇总✅1. 文件目录结构✅2. 各模式配置文件单机 Redis 配置文件6379主从节点配置哨兵模式配置集群配置✅3. 完整操作命令汇总Redis 基础常见命令单机部署命令主从部署命令哨兵部署命令集群部署命令 全文总结✅1. 四种部署模式对比✅2. 关键演进路径✅3. 面试核心要点 知识体系总览超详细Redis7.X 安装教程 ├── 一、Redis 单机部署 │ ├── ✅1. 检查安装 gcc 环境 │ ├── ✅2. 下载安装 Redis │ ├── ✅3. 启动 Redis │ ├── ✅4. 配置 Redis │ └── ✅5. 退出/关闭 Redis ├── 二、主从部署Master-Slave Replication │ ├── ✅1. 主从复制的作用 │ ├── ✅2. 主从复制部署 │ └── ✅3. 主从复制缺点 ├── 三、哨兵部署Sentinel │ ├── ✅1. 哨兵模式的原理 │ ├── ✅2. 哨兵选举与故障转移流程 │ ├── ✅3. 客观下线机制 │ ├── ✅4. 哨兵模式部署 │ ├── ✅5. 哨兵使用建议 │ └── ✅6. 哨兵模式的数据丢失风险 ├── 四、集群部署Cluster │ ├── ✅1. Redis集群的作用 │ ├── ✅2. Redis集群的数据分片哈希槽 │ ├── ✅3. 集群环境搭建 │ ├── ✅4. 集群数据读写 │ └── ✅5. 模拟故障转移 └── 五、附录完整配置文件与命令汇总 ├── ✅1. 文件目录结构 ├── ✅2. 各模式配置文件 └── ✅3. 完整操作命令汇总 核心本教程演示在 Linux 环境下安装 Redis7涵盖单机部署、主从部署、哨兵部署、集群部署四种模式的安装以及相应的架构介绍。Redis 由 C 语言编写运行需要 C 环境因此需要先安装 gcc。一、Redis 单机部署✅1. 检查安装 gcc 环境# 关闭防火墙systemctl stop firewalld.service# 查看防火墙状态firewall-cmd--state# 卸载防火墙yum remove firewalld# 检查 gcc 版本gcc--version# 安装 gccyuminstallgcc✅2. 下载安装 Redis# 安装应用养成良好习惯文件归类mkdir-p/opt/software/redis# 进入 redis 文件夹使用 wget 下载cd/opt/software/rediswgethttps://download.redis.io/redis-stable.tar.gz# 解压下载的 redis 包tar-xzfredis-stable.tar.gz# 进入 redis-stable 目录然后使用 make install 编译并安装# 安装完成后 /usr/local/bin 会生成相应的服务cdredis-stablemakeinstall# 检查是否成功生成ll /usr/local/bin编译安装后在/usr/local/bin下生成的可执行文件文件说明redis-benchmark性能测试工具redis-check-aof修复有问题的 AOF 文件redis-check-rdb修复有问题的 RDB 文件redis-sentinelRedis 哨兵集群使用redis-serverRedis 服务器启动命令redis-cli客户端操作入口✅3. 启动 Redis有两种启动方式# 方式一Redis 源码路径下启动./src/redis-server# 方式二使用 /usr/local/bin 路径下启动redis-server 注意前面的启动方式无法在后台运行退出终端之后直接关闭了 Redis 服务所以还需要针对 Redis 做一些配置。✅4. 配置 Redis修改当前 Redis 目录下的redis.conf文件vimredis.conf如果使用 vim 打开后没有行号可以在打开 vim 后输入:set number需要修改的关键配置项配置项行号说明bind * -::*#87修改 bind 项* -::*支持远程连接daemonize yes#309开启守护进程后台运行logfile /opt/software/redis/redis-stable/redis.log#355指定日志文件目录dir /opt/software/redis#510指定工作目录requirepass 1qazWSX#1044给默认用户设置密码使用 redis-cli 连接时需要密码校验protected-mode no#111允许远程连接如果不设置密码必须将此设置关闭修改完成后使用配置文件启动 Redis并使用 redis-cli 连接测试redis-server redis.conf redis-cli auth 1qazWSX 要点protected-mode no允许远程连接daemonize yes开启后台守护进程模式requirepass设置认证密码。生产环境建议设置复杂密码。✅5. 退出 / 关闭 Redis# 退出 redis 客户端quit# 关闭 redis 服务redis-clishutdown二、主从部署Master-Slave Replication 核心主从复制是指将一台 Redis 服务器的数据复制到其他的 Redis 服务器。前者称为主节点Master后者称为从节点Slave。数据的复制是单向的只能由主节点到从节点。默认情况下每台 Redis 服务器都是主节点一个主节点可以有多个从节点但一个从节点只能有一个主节点。✅1. 主从复制的作用a数据冗余主从复制实现了数据的热备份是持久化之外的一种数据冗余方式。b故障恢复当主节点出现问题时可以由从节点提供服务实现快速的故障恢复实际上是一种服务的冗余。c负载均衡在主从复制的基础上配合读写分离由主节点提供写服务由从节点提供读服务即写 Redis 数据时应用连接主节点读 Redis 数据时应用连接从节点分担服务器负载。尤其是在写少读多的场景下通过多个从节点分担读负载可以大大提高 Redis 服务器的并发量。d高可用基石主从复制还是哨兵和集群能够实施的基础因此说主从复制是 Redis 高可用的基础。✅2. 主从复制部署主节点不需要做任何改变从节点需要修改配置加上主节点信息# 在从节点配置文件中添加主节点信息replicaof192.168.75.1296379配置完成后可以在主库检查从节点信息# 主节点查看从节点信息info Replication✅3. 主从复制缺点复制延时信号衰减由于所有的写操作都是先在 Master 上操作然后同步更新到 Slave 上所以从 Master 同步到 Slave 机器上有一定的延迟。当系统很繁忙的时候延迟问题会更加严重Slave 机器数量的增加也会使这个问题更加严重。Master 挂了如何办默认情况下不会在 Slave 节点中自动重选一个 Master每次都要人工干预。 关键理解Redis 的主从复制主要用于实现数据的冗余备份和读分担并不是为了提供高可用性。因此在系统高可用方面单纯的主从架构无法很好地保证整个系统高可用。三、哨兵部署Sentinel 核心Redis 哨兵模式是通过在独立的哨兵节点上运行特定的哨兵进程来实现的。这些哨兵进程监控主从节点的状态并在发现故障时自动完成故障发现和转移并通知应用方实现高可用性。✅1. 哨兵模式的原理每个在线的哨兵节点都可以成为领导者选举过程如下每个哨兵节点会向其它哨兵发送is-master-down-by-addr命令征求判断并要求将自己设置为领导者当其它哨兵收到此命令时可以同意或者拒绝它成为领导者如果哨兵发现自己在选举的票数大于等于num(sentinels)/21时将成为领导者如果没有超过继续选举✅2. 哨兵选举与故障转移流程监控主从节点哨兵节点通过发送命令周期性地检查主从节点的健康状态包括主节点是否在线、从节点是否同步等如果哨兵节点发现主节点不可用它会触发一次故障转移故障转移过程确认主节点Sentinel 节点定期监控发现主节点是否出现故障。Sentinel 会向 Master 发送心跳 PING 来确认 Master 是否存活如果 Master 在一定时间范围内不回应 PONG 或者是回复了一个错误消息那么这个 Sentinel 会主观地单方面地认为这个 Master 已经不可用了选举新主节点过滤掉不健康的下线或断线、没有回复过哨兵 PING 响应的从节点选择从节点优先级最高的选择复制偏移量最大复制最完整的从节点当主节点出现故障由领导者负责处理主节点的故障转移客户端重定向哨兵节点会通知客户端新的主节点的位置使其能够与新的主节点建立连接并发送请求。这确保了客户端可以无缝切换到新的主节点继续进行操作。此外哨兵节点还负责监控从节点的状态。如果从节点出现故障哨兵节点可以将其下线并在从节点恢复正常后重新将其加入集群。✅3. 客观下线机制当主观下线的节点是主节点时此时该哨兵节点会通过指令sentinel is-masterdown-by-addr寻求其它哨兵节点对主节点的判断当超过quorum选举个数时哨兵节点则认为该主节点确实有问题这样就客观下线了——大部分哨兵节点都同意下线操作也就是客观下线。✅4. 哨兵模式部署3 个机器都需要修改sentinel.conf配置protected-mode no# 第6行关闭保护模式daemonizeyes# 第15行指定 sentinel 为后台启动logfile /opt/software/redis/redis-stable/sentinel.log# 第34行指定日志存放路径dir/opt/software/redis# 第73行指定数据库存放路径sentinel monitor mymaster192.168.75.12963792# 第93行指定监控的主节点# 参数说明mymaster 是主节点名称192.168.75.129:6379 是主节点地址# 最后的 2 表示至少需要2个哨兵节点同意才能判定主节点故障并进行故障转移sentinel down-after-milliseconds mymaster30000# 第134行判定服务器 down 的时间周期默认30秒sentinel failover-timeout mymaster180000# 第234行故障节点的最大超时时间180秒配置完成之后先从主节点开始启动哨兵。启动后检查哨兵状态redis-cli-p26379info sentinel故障模拟# 可以杀掉主节点的进程也可以直接停掉主节点服务psaux|grepredis redis-clishutdown# 观察哨兵日志129 主节点下线重新选举 131 为主节点tail-fsentinel.log# 重新启动 129 服务并观察日志129 加入主从此时主节点为 131 服务redis-server redis.conftail-fsentinel.log redis-cli-p26379info sentinel# 观察哨兵日志tail-fsentinel.log# 停止哨兵redis-cli-p26379shutdown# 切换到 131 服务已经为主节点redis-cli info replication当触发了哨兵选举之后会在后台更改redis.conf与sentinel.conf可以检查每台机器的文件末尾的数据catredis.confcatsentinel.conf✅5. 哨兵使用建议哨兵节点的数量应为多个哨兵本身应该集群保证高可用哨兵节点数应该是奇数各个哨兵节点的配置应一致如果哨兵节点部署在 Docker 等容器里面尤其要注意端口号的正确映射✅6. 哨兵模式并不能保证数据零丢失1. 复制延迟在主从复制中从节点的数据是异步复制自主节点的。这意味着在主节点故障时从节点可能还没有完全同步最新的数据从而导致数据丢失。2. 故障检测和转移时间Sentinel 检测到主节点故障并执行故障转移需要一定的时间。在这段时间内主节点可能已经接收了一些写操作但这些操作尚未被复制到从节点。3. 网络分区在发生网络分区网络分裂的情况下一部分节点可能与主节点失去联系。如果此时主节点继续处理写操作那么在网络恢复之前这些操作可能不会被复制到从节点。4. 多个从节点同时故障如果所有的从节点同时故障或在故障转移之前与主节点失联那么在主节点故障时将没有可用的从节点来提升为主节点。四、集群部署Cluster 核心Redis 集群是 Redis 的一种分布式运行模式它通过分片sharding来提供数据的自动分区和管理从而实现数据的高可用性和可扩展性。在集群模式下数据被分割成多个部分称为槽或 slots分布在多个 Redis 节点上。集群中的节点分为主节点和从节点主节点负责读写请求和集群信息的维护从节点只进行主节点数据和状态信息的复制。✅1. Redis 集群的作用数据分区核心功能集群将数据分散到多个节点突破了 Redis 单机内存大小的限制存储容量大大增加每个主节点都可以对外提供读服务和写服务大大提高了集群的响应能力Redis 单机内存大小受限问题如果单机内存太大bgsave和bgrewriteaof的 fork 操作可能导致主进程阻塞主从环境下主机切换时可能导致从节点长时间无法提供服务全量复制阶段主节点的复制缓冲区可能溢出高可用集群支持主从复制和主节点的自动故障转移与哨兵类似当任一节点发生故障时集群仍然可以对外提供服务。✅2. Redis 集群的数据分片哈希槽Redis 集群引入了**哈希槽hash slot**的概念Redis 集群有16384个哈希槽编号 0-16383集群的每个节点负责一部分哈希槽每个 Key 通过CRC16校验后对 16384 取余来决定放置哪个哈希槽通过这个值去找到对应的槽所对应的节点然后直接自动跳转到这个对应的节点上进行存取操作以 3 个节点组成的集群为例节点 A 包含 0 到 5460 号哈希槽节点 B 包含 5461 到 10922 号哈希槽节点 C 包含 10923 到 16383 号哈希槽 关键理解Redis 集群的主从复制模型中如果节点 B 失败了整个集群就会因缺少 5461-10922 这个范围的槽而不可用。因此需要为每个节点添加从节点 A1、B1、C1在节点 B 失败后集群选举 B1 为新的主节点继续服务。当 B 和 B1 都失败后集群将不可用。✅3. 集群环境搭建Redis Cluster 被配置为三主三从模式。这意味着每台服务器上的两个 Redis 节点中一个节点作为主库master另一个作为从库slave。创建集群配置# 创建集群配置文件夹将下面的配置复制过去另外两个机器重复这个过程mkdir-p/opt/software/redis/redis-stable/clustermkdir-p/opt/software/redis/clustervim./cluster/redis_6379.confvim./cluster/redis_6380.conf# 配置文件准备完成之后启动所有 redis 服务用 cluster 配置文件redis-server ./cluster/redis_6379.conf redis-server ./cluster/redis_6380.conf# 检查服务psaux|grepredis# 创建三主三从集群模式每一个主节点带一个从节点redis-cli--clustercreate --cluster-replicas1\192.168.75.129:6379192.168.75.129:6380\192.168.75.131:6379192.168.75.131:6380\192.168.75.132:6379192.168.75.132:6380# 查看集群信息redis-cli cluster info# 查看单个节点信息redis-cli info replication# 查看集群节点身份信息redis-cli cluster nodes# 停止 redis 服务redis-cli-p6379shutdownredis-cli-p6380shutdown6379 端口集群配置# 允许所有的IP地址bind* -::*# 后台运行daemonizeyes# 允许远程连接protected-mode no# 开启集群模式cluster-enabledyes# 集群节点超时时间cluster-node-timeout5000# 配置数据存储目录dir/opt/software/redis/cluster# 开启AOF持久化appendonlyyes# 端口port6379# log日志logfile/opt/software/redis/redis-stable/cluster/redis6379.log# 集群配置文件cluster-config-file nodes-6379.conf# AOF文件名appendfilenameappendonly6379.aof# RBD文件名dbfilenamedump6379.rdb6380 端口集群配置# 允许所有的IP地址bind* -::*# 后台运行daemonizeyes# 允许远程连接protected-mode no# 开启集群模式cluster-enabledyes# 集群节点超时时间cluster-node-timeout5000# 配置数据存储目录dir/opt/software/redis/cluster# 开启AOF持久化appendonlyyes# 端口port6380# log日志logfile/opt/software/redis/redis-stable/cluster/redis6380.log# 集群配置文件cluster-config-file nodes-6380.conf# AOF文件名appendfilenameappendonly6380.aof# RBD文件名dbfilenamedump6380.rdb✅4. 集群数据读写# 连接一个主节点进行写数据redis-cli info replication 注意直接连接读写可能会出现错误因为不同的节点负责不同的槽位会提示去正确的节点进行写入数据。可以通过开启路由规则-c来自动重定向# 开启路由规则 -credis-cli-c# 重新写入数据恢复正常setk1 b1✅5. 模拟故障转移# 注意机器 ip 的区分# 将 129 机器的主节点给干掉129 的 6379 服务redis-cli-p6379shutdown# 查看 129 机器从节点工作日志131 的 6380 日志catredis6380.log# 在切换到 132 机器上查看当前集群节点信息131:6380 已经升为主节点redis-cli cluster nodes# 重新启动 129.6379 服务redis-server ./cluster/redis_6379.conf# 查看 129.6379 的节点信息主节点变为从节点redis-cli-p6379info replication# 观察 131.6380 日志129.6379 重新加入集群五、附录完整配置文件与命令汇总✅1. 文件目录结构/opt/software/redis/ -- Redis 应用 /opt/software/redis/redis-stable -- Redis 应用根目录 /opt/software/redis/cluster -- Redis 集群应用文件目录日志、快照等信息 /opt/software/redis/redis-stable/cluster -- Redis 集群配置文件存放路径手工创建✅2. 各模式配置文件单机 Redis 配置文件6379所在目录/opt/software/redis/redis-stablebind* -::* protected-mode no port6379tcp-backlog511timeout0tcp-keepalive300daemonizeyespidfile /var/run/redis_6379.pid loglevel notice logfile /opt/software/redis/redis-stable/redis.log databases16always-show-logo no set-proc-titleyesproc-title-template{title} {listen-addr} {server-mode}locale-collatestop-writes-on-bgsave-erroryesrdbcompressionyesrdbchecksumyesdbfilename dump.rdb rdb-del-sync-files nodir/opt/software/redis replica-serve-stale-datayesreplica-read-onlyyesrepl-diskless-syncyesrepl-diskless-sync-delay5repl-diskless-sync-max-replicas0repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority100acllog-max-len128lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no lazyfree-lazy-user-flush no oom-score-adj no oom-score-adj-values0200800disable-thpyesappendonly no appendfilenameappendonly.aofappenddirnameappendonlydirappendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage100auto-aof-rewrite-min-size 64mb aof-load-truncatedyesaof-use-rdb-preambleyesaof-timestamp-enabled no slowlog-log-slower-than10000slowlog-max-len128latency-monitor-threshold0notify-keyspace-eventshash-max-listpack-entries512hash-max-listpack-value64list-max-listpack-size-2list-compress-depth0set-max-intset-entries512set-max-listpack-entries128set-max-listpack-value64zset-max-listpack-entries128zset-max-listpack-value64hll-sparse-max-bytes3000stream-node-max-bytes4096stream-node-max-entries100activerehashingyesclient-output-buffer-limit normal000client-output-buffer-limit replica 256mb 64mb60client-output-buffer-limit pubsub 32mb 8mb60hz10dynamic-hzyesaof-rewrite-incremental-fsyncyesrdb-save-incremental-fsyncyesjemalloc-bg-threadyes主从节点配置所在目录/opt/software/redis/redis-stable主节点 129.6379 配置与单机主节点配置一样从节点 131.6379 配置在单机配置基础上增加一行replicaof192.168.75.1296379其余配置与主节点相同。大家可以将不同服务器的端口设置不同的值以方便区分。132.6379 从节点配置同 131.6379。哨兵模式配置所在目录/opt/software/redis/redis-stable主从配置无需修改直接配置 sentinel 文件3 个机器配置相同protected-mode no port26379daemonizeyespidfile /var/run/redis-sentinel.pid loglevel notice logfile /opt/software/redis/redis-stable/sentinel.logdir/opt/software/redis sentinel monitor mymaster192.168.75.12963792sentinel down-after-milliseconds mymaster30000acllog-max-len128sentinel parallel-syncs mymaster1sentinel failover-timeout mymaster180000sentinel deny-scripts-reconfigyesSENTINEL resolve-hostnames no SENTINEL announce-hostnames no SENTINEL master-reboot-down-after-period mymaster0集群配置所在目录/opt/software/redis/redis-stable/cluster3 个机器配置相同。6379 配置bind* -::* daemonizeyesprotected-mode no cluster-enabledyescluster-node-timeout5000dir/opt/software/redis/clusterappendonlyyesport6379logfile/opt/software/redis/redis-stable/cluster/redis6379.logcluster-config-file nodes-6379.conf appendfilenameappendonly6379.aofdbfilenamedump6379.rdb6380 配置bind* -::* daemonizeyesprotected-mode no cluster-enabledyescluster-node-timeout5000dir/opt/software/redis/clusterappendonlyyesport6380logfile/opt/software/redis/redis-stable/cluster/redis6380.logcluster-config-file nodes-6380.conf appendfilenameappendonly6380.aofdbfilenamedump6380.rdb✅3. 完整操作命令汇总Redis 基础常见命令命令说明keys *查看当前库所有的 keyexists key判断某个 key 是否存在type key查看 key 值是什么类型del key删除指定的 key 数据unlink key非阻塞删除仅将 keys 从 keyspace 元数据中删除真正的删除在后续异步中操作ttl key查看还有多少秒过期-1 表示永不过期-2 表示已过期expire key 秒钟为给定的 key 设置过期时间move key dbindex[0-15]将当前数据库的 key 移动到给定的数据库 db 当中select dbindex切换数据库 [0-15]默认值为 0dbsize查看当前数据库 key 的数量flushdb清空当前库flushall通杀全部库单机部署命令# 关闭防火墙systemctl stop firewalld.service firewall-cmd--stateyum remove firewalld# gccgcc--versionyuminstallgcc# 下载安装mkdir-p/opt/software/rediscd/opt/software/rediswgethttps://download.redis.io/redis-stable.tar.gztar-xzfredis-stable.tar.gzcdredis-stablemakeinstallll /usr/local/bin# 启动./src/redis-server# 源码路径下启动redis-server# /usr/local/bin 下启动# 配置vimredis.conf# 以配置文件启动 密码认证登录redis-server redis.conf redis-cli-a1qazWSX# 退出/关闭quit redis-clishutdown主从部署命令# 主节点查看从节点信息info Replication哨兵部署命令# 故障模拟psaux|grepredis redis-clishutdown# 观察哨兵日志tail-fsentinel.log# 重新启动服务redis-server redis.conftail-fsentinel.log redis-cli-p26379info sentineltail-fsentinel.log# 停止哨兵redis-cli-p26379shutdown# 验证主从切换redis-cli info replication# 查看配置文件变化catredis.confcatsentinel.conf集群部署命令# 创建集群目录mkdir-p/opt/software/redis/redis-stable/clustermkdir-p/opt/software/redis/clustervim./cluster/redis_6379.confvim./cluster/redis_6380.conf# 启动集群服务redis-server ./cluster/redis_6379.conf redis-server ./cluster/redis_6380.conf# 检查服务psaux|grepredis# 创建三主三从集群redis-cli--clustercreate --cluster-replicas1\192.168.75.129:6379192.168.75.129:6380\192.168.75.131:6379192.168.75.131:6380\192.168.75.132:6379192.168.75.132:6380# 查看集群信息redis-cli cluster info redis-cli info replication redis-cli cluster nodes# 停止服务redis-cli-p6379shutdownredis-cli-p6380shutdown# 集群读写带路由规则redis-cli info replication redis-cli-csetk1 b1# 故障转移模拟redis-cli-p6379shutdown# 干掉主节点catredis6380.log# 查看日志redis-cli cluster nodes# 查看节点变化redis-server ./cluster/redis_6379.conf# 重新启动redis-cli-p6379info replication# 检查变化 全文总结✅1. 四种部署模式对比模式节点数高可用数据分片适用场景单机1否否本地开发、测试主从1主N从否需手动切换否读写分离、数据备份哨兵1主N从N哨兵是自动故障转移否中小规模高可用集群3主3从推荐是是16384槽大规模分布式✅2. 关键演进路径单机 → 主从数据冗余 读写分离 → 哨兵在主从基础上实现自动故障转移 → 集群数据分片 高可用突破单机内存限制✅3. 面试核心要点主从复制是 Redis 高可用的基础数据单向流动Master → Slave哨兵模式解决主从的自动故障转移问题但不能保证数据零丢失集群模式通过 16384 个哈希槽实现数据分片CRC16(key) % 16384 定位槽位哨兵节点应为奇数选举需 ≥ num/21 票客观下线需要超过 quorum 个哨兵同意