本文是一份面向 Debian / Ubuntu 的 Redis 实战指南,重点讲清楚如何安装、启动、连接、配置、持久化、复制、哨兵、高可用思路,以及常见排障。它适合缓存、会话、队列、限流、分布式锁和轻量数据存储场景。
适用场景
- Web 缓存
- Session 存储
- 消息队列或任务缓冲
- 分布式锁
- 排行榜、计数器、热点数据
- 需要高性能键值存储的场景
Redis 是什么
Redis 是一个内存型数据结构存储系统,支持多种数据结构,例如:
- string
- hash
- list
- set
- sorted set
- stream
Redis 的特点是:
- 读写快
- 结构简单
- 适合做缓存和高频访问数据
- 可以通过持久化和复制增强可靠性
安装前准备
先更新软件包索引:
sudo apt update确认你想使用:
- Debian 仓库版本
- 还是 Redis 官方仓库版本
如果你希望版本更接近上游,建议用官方仓库。
安装 Redis
方式一:Debian 仓库
sudo apt install -y redis-server redis-tools方式二:Redis 官方仓库
官方文档推荐通过其 APT 仓库安装:
sudo apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis启动服务并设置开机自启
sudo systemctl enable redis-server
sudo systemctl start redis-server查看状态:
sudo systemctl status redis-server如果你安装的是官方包,服务名可能略有不同。先用 systemctl list-units --type=service | grep redis 确认。
连接 Redis
命令行客户端
redis-cli指定主机和端口:
redis-cli -h 127.0.0.1 -p 6379认证后连接:
redis-cli -a your_password常用测试命令
PING
SET hello world
GET hello
DEL hello正常情况下,PING 应返回:
PONG基本数据类型
String
最常见类型,适合缓存和计数。
SET user:1:name Alice
GET user:1:name
INCR counter:viewsHash
适合对象型数据。
HSET user:1 name Alice age 18
HGET user:1 name
HGETALL user:1List
适合队列和消息缓冲。
LPUSH jobs task1
RPUSH jobs task2
LPOP jobsSet
适合去重。
SADD tags redis php linux
SMEMBERS tagsSorted Set
适合排行榜。
ZADD rank 100 alice 200 bob
ZRANGE rank 0 -1 WITHSCORES常用 CLI 命令
redis-cli INFO
redis-cli CLIENT LIST
redis-cli DBSIZE
redis-cli KEYS '*'
redis-cli SCAN 0
redis-cli TTL mykey
redis-cli EXPIRE mykey 60注意:
- KEYS * 在大库上不推荐
- 生产环境优先用 SCAN
配置文件
常见配置文件位置:
/etc/redis/redis.conf官方仓库版本的位置可能有所不同,以实际安装为准。
常见关键配置项
bind 127.0.0.1
port 6379
protected-mode yes
timeout 0
tcp-keepalive 300
daemonize no
supervised systemd
dir /var/lib/redis网络访问
仅本机访问
默认建议只监听本机:
bind 127.0.0.1
protected-mode yes允许远程访问
如果你必须远程连接,要同时考虑:
- bind
- 密码/ACL
- 防火墙
- 云安全组
不要直接把 Redis 暴露到公网。
认证与 ACL
Redis 早期常用 requirepass,较新版本支持更灵活的 ACL。
简单密码
requirepass StrongPasswordHereACL 基本思路
你可以为不同用途创建不同用户,并限制命令和 key 范围。
例子:
ACL SETUSER app on >StrongPasswordHere ~app:* +@all
ACL LIST建议:
- 生产环境优先考虑 ACL
- 不要给应用过大的权限
持久化
Redis 官方文档说明了几种持久化方式:
- RDB:快照
- AOF:追加日志
- RDB + AOF:同时使用
- 也可以完全不持久化,用于纯缓存
RDB
RDB 是定时快照,适合备份和快速恢复。
常见配置:
save 900 1
save 300 10
save 60 10000AOF
AOF 会记录写命令,更适合降低数据丢失窗口。
常见配置:
appendonly yes
appendfsync everysec选择建议
- 纯缓存:可以不持久化
- 需要可恢复的数据:优先 AOF 或 AOF + RDB
- 需要备份友好:RDB 很有用
备份与恢复
RDB 备份
RDB 文件通常是备份友好的,可以直接拷贝。
导出当前数据
redis-cli SAVE谨慎使用 SAVE,它会阻塞主线程;生产环境更常用后台快照或 AOF。
恢复
恢复时通常是:
- 停止 Redis
- 替换数据文件
- 启动 Redis
具体取决于你用的是 RDB 还是 AOF。
复制
Redis 复制采用主从模型,副本会从主库同步数据。
基本概念
- master:主节点
- replica:副本节点
配置副本
replicaof 127.0.0.1 6379如果主库有密码,副本也要配置认证参数。
常见用途
- 读写分离
- 数据冗余
- 故障切换基础
Sentinel
Redis Sentinel 用于非集群模式下的高可用。
它的主要能力:
- 监控
- 通知
- 自动故障转移
- 作为客户端配置提供者
常见场景:
- 1 主多副本
- 需要主故障自动切换
注意:
- Sentinel 不能替代你的应用容错设计
- 复制是异步的,确认写入不等于绝对不丢数据
性能与内存
查看内存
redis-cli INFO memory内存策略
常见配置:
maxmemory 512mb
maxmemory-policy allkeys-lru常见淘汰策略:
- noeviction
- allkeys-lru
- volatile-lru
- allkeys-random
- volatile-ttl
建议
- 缓存场景要设置 maxmemory
- 明确数据淘汰策略
- 监控命中率和内存占用
常用排障
1. 连不上
检查:
- 服务是否启动
- 端口是否监听
- bind 是否限制在本机
- 防火墙是否拦截
2. 认证失败
检查:
- requirepass
- ACL 用户名和密码
- 应用连接串
3. 数据丢失
检查:
- 是否开启持久化
- 持久化策略是否满足业务要求
- 是否发生了意外重启
4. 内存飙升
检查:
- key 是否过多
- value 是否过大
- 是否设置了过期时间
- 是否需要内存淘汰策略
5. 慢或阻塞
检查:
- 是否使用了 KEYS
- 是否执行了大范围阻塞命令
- 持久化 fork 是否占用过高
安全建议
- 默认只允许本机访问
- 一定要设置密码或 ACL
- 不要把 Redis 暴露到公网
- 不要使用危险命令随便操作生产库
- 给缓存和业务数据分开设计
常见危险命令
生产环境要谨慎:
- FLUSHALL
- FLUSHDB
- KEYS
- SAVE
- CONFIG SET
最小可用流程
如果你只想快速装一个可用 Redis:
sudo apt update
sudo apt install -y redis-server redis-tools
sudo systemctl enable redis-server
sudo systemctl start redis-server
redis-cli PING如果你要做成生产可用,还要继续补:
- 密码或 ACL
- 持久化
- 复制或 Sentinel
- 防火墙
结论
Redis 真正好用的核心不是“装上就完了”,而是:
- 选择合适的数据类型
- 设计好过期和淘汰策略
- 明确是否需要持久化
- 控制暴露面和认证
- 为高可用做好复制和哨兵规划