加群联系作者vx:xiaoda0423
仓库地址:https://webvueblog.github.io/JavaPlusDoc/
下面是 Redis 安装与部署的完整文档,涵盖了:
- 
✅ 单机安装(适用于开发、测试)
 - 
✅ 主从复制 + 持久化配置(适用于生产)
 - 
✅ 常见问题与优化建议
 
✅ 一、单机安装 Redis(开发或测试)
🧩 1. 安装依赖
            
            
              go
              
              
            
          
          sudo apt update
sudo apt install build-essential tcl -y
        📦 2. 下载并编译 Redis
            
            
              go
              
              
            
          
          wget http://download.redis.io/releases/redis-6.2.14.tar.gz
tar xzf redis-6.2.14.tar.gz
cd redis-6.2.14
make
sudo make install
        可执行文件将安装到
/usr/local/bin/:redis-server,redis-cli, 等。
🛠 3. 修改配置文件(redis.conf)
        
            
            
              go
              
              
            
          
          bind 0.0.0.0             # 支持远程访问
protected-mode no        # 关闭保护模式
requirepass yourpasswd   # 设置访问密码(生产务必设置)
daemonize yes            # 后台运行
        🚀 4. 启动 Redis 服务
            
            
              go
              
              
            
          
          redis-server redis.conf
        ✅ 测试连接
            
            
              go
              
              
            
          
          redis-cli -a yourpasswd
127.0.0.1:6379> ping
PONG
        ✅ 二、主从复制(高可用基础)
假设:
- 
主节点:192.168.1.101
 - 
从节点:192.168.1.102
 
📍 主节点配置(redis.conf)
            
            
              go
              
              
            
          
          bind 0.0.0.0
protected-mode no
requirepass yourpasswd
        📍 从节点配置(redis.conf)
            
            
              go
              
              
            
          
          bind 0.0.0.0
protected-mode no
replicaof 192.168.1.101 6379
masterauth yourpasswd
requirepass yourpasswd
        ✅ 验证主从同步
在主节点执行:
            
            
              go
              
              
            
          
          redis-cli -a yourpasswd set name "redis-master"
        在从节点验证:
            
            
              go
              
              
            
          
          redis-cli -a yourpasswd get name
# 输出:redis-master
        ✅ 三、持久化配置(RDB + AOF)
在 redis.conf 中启用:
            
            
              go
              
              
            
          
          save 900 1           # 900 秒内至少 1 个 key 变化就保存 RDB 快照
save 300 10
save 60 10000
appendonly yes       # 开启 AOF 持久化
appendfilename "appendonly.aof"
        建议生产开启 AOF,保障数据更完整。
✅ 四、设置开机启动(Ubuntu)
            
            
              go
              
              
            
          
          sudo cp utils/redis_init_script /etc/init.d/redis
sudo update-rc.d redis defaults
        ✅ 五、常用命令参考
| 命令 | 说明 | 
|---|---|
redis-server redis.conf | 
启动 Redis 实例 | 
redis-cli -a 密码 | 
连接 Redis | 
info replication | 
查看主从状态 | 
CONFIG SET requirepass xxx | 
动态设置密码 | 
CONFIG GET * | 
查看当前所有配置 | 
shutdown | 
安全关闭 Redis | 
✅ 六、优化建议(生产环境)
| 配置项 | 建议 | 
|---|---|
maxmemory | 
限制最大内存,避免 OOM | 
maxmemory-policy | 
设置淘汰策略(如 allkeys-lru) | 
appendfsync | 
设置为 everysec 保证性能与安全平衡 | 
tcp-keepalive | 
避免连接死链 | 
bind + requirepass | 
设置内网访问 + 登录密码 | 
✅ 七、常见问题排查
| 问题 | 原因与解决方案 | 
|---|---|
DENIED Redis is running... | 
没有设置密码或密码错误 | 
Can't connect to Redis | 
端口未开放、防火墙未关闭 | 
| 主从不同步 | IP、端口或 replicaof 配置错误 | 
| 无法远程访问 | bind 和 protected-mode 设置不对 | 
✅ 八、安装可视化工具(推荐)
| 工具名 | 功能说明 | 
|---|---|
| RedisInsight | 官方可视化管理工具(推荐) | 
| RDM | 支持多平台的 GUI 工具 | 
| AnotherRedisDesktopManager | 高颜值、支持 SSH 和集群 | 
Redis 安装与部署指南(2025 年版)
适用对象:需要在生产环境(4 vCPU / 16 GB RAM 以上)快速部署 Redis(单机、哨兵、Cluster 模式)的后端 / 运维工程师。
1. 版本概览
| 分支 | 最新小版本 | 发布时间 | 生命周期 | 备注 | 
|---|---|---|---|---|
| 7.2 | 7.2.5 | 2025‑03‑15 | 2025‑Q4 之前为当前 GA | 推荐新集群直接使用,包含 ACL、复制流水线优化 | 
| 7.0 LTS | 7.0.15 | 2025‑02‑20 | 至 8.0 GA+18 个月 | 长期支持分支,企业常用 | 
| 6.2 | 6.2.14 | 2025‑01‑30 | 维护到 2025‑12 | 仅安全补丁,不再推荐新建集群 | 
建议 :若项目依赖模块(如 RedisBloom、RedisSearch),可直接采用 Redis Stack 7.2.x。纯 KV/QoS 场景使用官方 7.2 即可。
2. 环境要求
| 资源 | 最低 | 推荐生产 | 
|---|---|---|
| CPU | 2 vCPU | ≥4 vCPU(核心数影响并发) | 
| 内存 | 4 GB | ≥16 GB(取决于数据量) | 
| 磁盘 | SSD ≥ 50 GB | SSD/NVMe,noatime,AOF/RDB 持久化目录需高 IOPS | 
| OS | Ubuntu 22.04 / AlmaLinux 9 / Debian 12 | 内核 ≥5.15,关闭透明大页 | 
系统调优:
            
            
              go
              
              
            
          
          # redis.conf 需要关闭 THP
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# /etc/sysctl.d/99-redis.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535
fs.file-max = 2097152
# 生效
sysctl -p /etc/sysctl.d/99-redis.conf
# ulimit (/etc/security/limits.conf)
* soft nofile 65536
* hard nofile 65536
        3. 安装方式对比
| 方式 | 优点 | 缺点 | 
|---|---|---|
| APT/YUM | 快速、一条命令 | 版本跟随发行版,可能落后 | 
| 官方源码编译 | 最新、灵活 | 需安装 gcc/make,编译耗时 | 
| Docker / K8s(Bitnami / Redis-OSS 官方镜像) | 分发简单、隔离好 | 持久化卷、资源限制需关注 | 
生产环境 :若非容器平台,推荐源码编译 + systemd ;云原生建议使用 Bitnami Helm Chart 或 Redis Operator (K8s) 。
4. 单节点快速安装(源码 + systemd)
            
            
              go
              
              
            
          
          # 4.1 获取源码(7.2.5)
wget https://download.redis.io/releases/redis-7.2.5.tar.gz
# 4.2 编译
apt-get update && apt-get install -y build-essential jemalloc-dev tcl
mkdir -p /opt/redis
 tar -xzf redis-7.2.5.tar.gz -C /opt/redis
cd /opt/redis/redis-7.2.5 && make -j$(nproc)
make install PREFIX=/usr/local/redis
# 4.3 创建用户与目录
useradd --system --home /var/lib/redis --shell /sbin/nologin redis
mkdir -p /var/lib/redis /var/log/redis /etc/redis
cp /opt/redis/redis-7.2.5/redis.conf /etc/redis/redis.conf
chown -R redis:redis /var/lib/redis /var/log/redis /etc/redis
# 4.4 修改关键配置 (/etc/redis/redis.conf)
 supervised systemd
bind 0.0.0.0
 port 6379
 dir /var/lib/redis
 logfile /var/log/redis/redis.log
# 建议持久化策略
 save 900 1
 save 300 10
 maxmemory 8gb
 maxmemory-policy allkeys-lru
 requirepass "Prod#Redis2025!"
 appendonly yes
 appendfsync everysec
        创建 systemd 服务
            
            
              go
              
              
            
          
          cat >/etc/systemd/system/redis.service <<'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=notify
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -a Prod#Redis2025! shutdown
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now redis
        验证:redis-cli -a Prod#Redis2025! info server。
5. 哨兵模式(高可用)
5.1 架构
- 
Master ×1、Slave ×2、Sentinel ×3(可与 Slave 同机)
 - 
Sentinel 端口默认 26379
 
5.2 快速配置 sentinel.conf
            
            
              go
              
              
            
          
          port 26379
sentinel monitor mymaster 192.168.10.11 6379 2
sentinel auth-pass mymaster Prod#Redis2025!
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
        各节点 sentinel 只需修改本机 IP 与日志路径即可,systemd 同理。
5.3 故障转移流程
- 
Sentinel 判定 master down → 选举新 master。
 - 
自动
SLAVEOF其余节点。 - 
客户端通过 VIP / 域名 + Sentinel discover 重连。
 
6. Redis Cluster 模式(水平扩展)
6.1 规划
- 
节点总数 ≥6(3 master + 3 replica)
 - 
同一主从放不同机架
 
6.2 关键配置
            
            
              go
              
              
            
          
          port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
requirepass Prod#Redis2025!
masterauth Prod#Redis2025!
        多端口部署或 Docker 每实例单端口均可。
6.3 初始化集群
            
            
              go
              
              
            
          
          redis-cli -a Prod#Redis2025! --cluster create \
 10.0.0.1:7000 10.0.0.2:7000 10.0.0.3:7000 \
 10.0.0.4:7000 10.0.0.5:7000 10.0.0.6:7000 \
 --cluster-replicas 1
        验证:redis-cli -a Prod#Redis2025! -c -h 10.0.0.1 -p 7000 cluster info。
7. 性能调优
| 维度 | 建议 | 
|---|---|
maxmemory-policy | 
缓存业务推荐 allkeys-lru / volatile-lru | 
| RDB & AOF | 禁用同写盘 ,AOF everysec + RDB 仅备份 | 
| 内核 | net.core.somaxconn=65535 ;tcp-backlog 同步 | 
| 客户端超时 | timeout 300 ;Cluster 模式关闭 Nagle:tcp-keepalive 300 | 
| 慢查询 | slowlog-log-slower-than 10000 ;借助 redis-slowlog + ELK | 
8. 监控与告警
- 
Prometheus Exporter :
oliver006/redis_exporter→ Grafana DashboardRedis-Overall。 - 
Key 指标 :
used_memory_rss,connected_clients,instantaneous_ops_per_sec,keyspace_hits/misses,aof_current_size,master_link_down_since_seconds。 - 
容器化时注意 cgroup 限制:
mem_fragmentation_ratio> 1.5 需排查。 
9. 备份与恢复
| 方法 | 优缺点 | 
|---|---|
| RDB 快照 | 全量备份,可用 bgsave + rsync;速度快 | 
| AOF | 持久化每条写命令,可重放到最新 | 
| Disaster Recovery (DR) | 主 → 异地从库 (replica) | 
恢复示例:
            
            
              go
              
              
            
          
          systemctl stop redis
cp /backup/dump.rdb /var/lib/redis/
chown redis:redis /var/lib/redis/dump.rdb
systemctl start redis
        10. 常见问题排查
| 问题 | 处理 | 
|---|---|
ERR max number of clients reached | 
调大 maxclients (默认 10000) 并增大 ulimit -n | 
| 内存暴涨 | 查看 biggest keys、MEMORY USAGE <key>;排查惰性删除 | 
| 主从延迟大 | 网络抖动 / RDB/AOF rewrite;监控 master_repl_offset vs slave_repl_offset | 
Cluster MOVED 错误 | 
节点 IP 变动未重建集群;确保 cluster-announce-ip 配置固定 IP | 
11. 升级策略
- 
6.2 → 7.x 支持滚动升级:从从节点开始;
CONFIG SET protected-mode no临时关闭;升级完毕重新CONFIG REWRITE。 - 
大版本前务必全量 RDB 备份或冷数据快照。
 
太好了!下面我将为你补充两部分:
✅ 一、Redis 高可用部署指南(Sentinel + Cluster)
📌 1. Sentinel 哨兵模式(高可用主从自动切换)
📐 架构示意图:
            
            
              go
              
              
            
          
          +------------------------+
            |   redis-sentinel1     |
            +------------------------+
                     |      |
         +-----------+      +------------+
         |                             |
+----------------+        +----------------+
|   redis-master | <----> |   redis-slave  |
+----------------+        +----------------+
         |                             |
         +-----------+      +-----------+
                     |      |
            +------------------------+
            |   redis-sentinel2     |
            +------------------------+
        📌 配置步骤(以 3 个哨兵 + 1 主 2 从为例):
🔧 redis-master.conf
            
            
              go
              
              
            
          
          port 6379
bind 0.0.0.0
requirepass mypass
masterauth mypass
        🔧 redis-slave.conf
            
            
              go
              
              
            
          
          port 6379
bind 0.0.0.0
replicaof 192.168.1.101 6379  # 主节点 IP
masterauth mypass
requirepass mypass
        🔧 sentinel.conf(每台哨兵)
            
            
              go
              
              
            
          
          port 26379
sentinel monitor mymaster 192.168.1.101 6379 2
sentinel auth-pass mymaster mypass
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
        所有节点监听 6379,哨兵监听 26379,监控名称为
mymaster
✅ 启动哨兵:
            
            
              go
              
              
            
          
          redis-sentinel /path/to/sentinel.conf
        📌 2. Redis Cluster 集群模式(数据分片 + 高可用)
架构推荐:
- 
6 个节点:3 主 3 从
 - 
每主节点一个从节点作为故障切换
 
🔧 创建节点配置(例如:7000~7005)
修改 6 份配置:
            
            
              go
              
              
            
          
          port 7000  # 改为 7001~7005
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
requirepass mypass
masterauth mypass
        🚀 启动 6 个 Redis 实例(每个都独立)
            
            
              go
              
              
            
          
          redis-server redis7000.conf
...
redis-server redis7005.conf
        🧠 创建集群
            
            
              go
              
              
            
          
          # 安装 Ruby redis-cli 工具(推荐)
gem install redis
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
        创建时选择:每主分配一个从。
✅ 二、Spring Boot 集成 Redis 配置(支持单机、哨兵、集群)
✅ 1. Maven 依赖
            
            
              go
              
              
            
          
          <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
        ✅ 2. application.yml 示例
🔹 单机模式:
            
            
              go
              
              
            
          
          spring:
  redis:
    host: 192.168.1.101
    port: 6379
    password: mypass
        🔹 Sentinel 模式:
            
            
              go
              
              
            
          
          spring:
  redis:
    sentinel:
      master: mymaster
      nodes:
        - 192.168.1.101:26379
        - 192.168.1.102:26379
        - 192.168.1.103:26379
    password: mypass
        🔹 Cluster 模式:
            
            
              go
              
              
            
          
          spring:
  redis:
    cluster:
      nodes:
        - 192.168.1.101:7000
        - 192.168.1.102:7001
        - 192.168.1.103:7002
        - 192.168.1.104:7003
        - 192.168.1.105:7004
        - 192.168.1.106:7005
    password: mypass
        ✅ 3. 示例代码(RedisTemplate)
            
            
              go
              
              
            
          
          @Service
public class RedisService {
    @Autowired
    private StringRedisTemplate redisTemplate;
    public void save(String key, String value) {
        redisTemplate.opsForValue().set(key, value, Duration.ofMinutes(10));
    }
    public String get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}
        🧩 补充建议
- 
使用
Lettuce默认连接池(Spring Boot 内置) - 
若并发较高,可改为
Redisson,支持分布式锁等扩展功能 - 
可用
CacheManager结合 Spring 缓存注解@Cacheable 
Spring Boot + Redisson 分布式锁实战,RedisCluster的部署自动化脚本
太好了!下面我将为你完整补充两部分内容:
✅ 一、Spring Boot + Redisson 分布式锁实战
使用 Redisson 来实现分布式锁,适用于高并发环境(如订单下单、秒杀、任务调度防重等)
📦 1. 引入 Maven 依赖(推荐用最新 Redisson 版本)
            
            
              go
              
              
            
          
          <dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson-spring-boot-starter</artifactId>
  <version>3.22.1</version>
</dependency>
        ⚙️ 2. application.yml 配置
✅ 单机 Redis
            
            
              go
              
              
            
          
          redisson:
  single-server-config:
    address: redis://192.168.1.101:6379
    password: mypass
        ✅ Redis Cluster
            
            
              go
              
              
            
          
          redisson:
  cluster-servers-config:
    node-addresses:
      - redis://192.168.1.101:7000
      - redis://192.168.1.102:7001
      - redis://192.168.1.103:7002
    password: mypass
        也可以在 Java 中用
Config构造。
✅ 3. 分布式锁使用示例(推荐写法)
            
            
              go
              
              
            
          
          @Service
public class LockService {
    @Autowired
    private RedissonClient redissonClient;
    public void doBusiness() {
        RLock lock = redissonClient.getLock("my-distributed-lock");
        try {
            boolean success = lock.tryLock(5, 10, TimeUnit.SECONDS);
            if (success) {
                // 成功加锁后执行业务逻辑
                System.out.println("获取锁成功,执行业务");
                Thread.sleep(3000); // 模拟处理
            } else {
                System.out.println("未获取到锁");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            if (lock.isHeldByCurrentThread()) {
                lock.unlock();
                System.out.println("释放锁");
            }
        }
    }
}
        ✅ 4. 注解方式封装(可选)
你可以用 AOP + 自定义注解封装 @DistributedLock(key="xxx") 来增强分布式锁体验。需要我写这一部分可以继续加。
✅ 二、Redis Cluster 自动化部署脚本(6 节点,3主3从)
适用于本地开发或快速起测试环境
📁 目录结构建议
            
            
              go
              
              
            
          
          redis-cluster/
├── redis-7000.conf
├── redis-7001.conf
├── redis-7002.conf
├── redis-7003.conf
├── redis-7004.conf
├── redis-7005.conf
├── start-all.sh
├── create-cluster.sh
        📄 示例 redis-7000.conf(其他类似,仅改端口)
            
            
              go
              
              
            
          
          port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
dir ./
requirepass mypass
masterauth mypass
        🖥 脚本:start-all.sh
        
            
            
              go
              
              
            
          
          #!/bin/bash
for port in {7000..7005}
do
  mkdir -p data/${port}
  redis-server redis-${port}.conf &
done
        ⚙️ 脚本:create-cluster.sh
        
            
            
              go
              
              
            
          
          #!/bin/bash
echo "yes" | 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 \
  -a mypass
        ✅ 运行方式(Linux 或 Mac)
            
            
              go
              
              
            
          
          chmod +x *.sh
./start-all.sh
./create-cluster.sh
        🔚 总结
| 项目 | 实用场景 | 
|---|---|
| Redisson 分布式锁 | 秒杀、单用户限流、定时任务等 | 
| Redis Cluster 自动部署脚本 | 快速搭建本地 3主3从高可用集群 |