第04章:Redis 配置与启动优化
本章目标
学完本章后,你将能够:
- 理解 redis.conf 核心配置项
- 动态修改配置(CONFIG GET/SET)
- 使用 SELECT 切换数据库
- 使用 INFO 查看服务器状态
前置知识
- 需要先学习:第02-03章(安装、Key 基础)
4.1 redis.conf 核心配置
bash
# 网络
bind 127.0.0.1 # 绑定的网卡,生产应指定内网 IP
port 6379 # 端口
protected-mode yes # 保护模式(无密码+非本地=拒绝连接)
requirepass "" # 密码(生产必设!)
# 内存
maxmemory 0 # 最大内存(0=不限制,生产必设!)
maxmemory-policy noeviction # 淘汰策略
# 持久化
save 3600 1 300 100 60 10000 # RDB 触发条件
appendonly no # AOF(默认关闭)
dbfilename dump.rdb # RDB 文件名
# 日志
loglevel notice # 日志级别(debug/verbose/notice/warning)
logfile "" # 日志文件(空=标准输出)
# 客户端
timeout 0 # 客户端空闲超时(0=永不超时)
maxclients 10000 # 最大客户端数
# 慢查询
slowlog-log-slower-than 10000 # 慢查询阈值(微秒)
slowlog-max-len 128 # 慢查询日志条数4.2 动态修改配置
bash
# 查看所有
CONFIG GET *
# 查看特定
CONFIG GET maxmemory
CONFIG GET maxmemory-policy
# 修改(重启失效)
CONFIG SET maxmemory 256mb
CONFIG SET maxmemory-policy allkeys-lru
CONFIG SET requirepass "mypassword"
# 注意:修改 requirepass 后需要认证
AUTH mypassword
# 永久生效(写入配置文件)
CONFIG REWRITE📌
CONFIG REWRITE把当前运行的配置写入 redis.conf,重启也生效。
4.3 多数据库
bash
# 默认有 16 个数据库(0-15)
SELECT 0 # 切换到 0 号
SELECT 1 # 切换到 1 号
# 每个数据库独立
SET name "张三" # 存在 0 号
SELECT 1
GET name # (nil) ← 1 号没有
# 移动 Key 到其他数据库
MOVE name 2
# 当前数据库 Key 数量
DBSIZE
# 清空当前数据库(⚠️ 危险!)
FLUSHDB
# 清空所有数据库(⚠️ 极其危险!)
FLUSHALL⚠️ 多数据库在生产中几乎不用。Cluster 模式不支持多数据库。推荐用 Key 前缀(
prod:key/test:key)区分环境。
4.4 INFO 命令
bash
INFO # 全部信息
INFO server # 服务器信息(版本、运行时间)
INFO clients # 客户端信息
INFO memory # 内存信息
INFO stats # 统计信息(命中率、命令计数)
INFO replication # 复制信息
INFO keyspace # 各数据库 Key 数量关键指标
bash
INFO memory
# used_memory_human: 1.2M ← 当前内存使用
# maxmemory_human: 256M ← 最大内存限制
# mem_fragmentation_ratio: 1.05 ← 内存碎片率
INFO stats
# keyspace_hits: 1000 ← 命中次数
# keyspace_misses: 50 ← 未命中次数
# 命中率 = hits / (hits + misses) = 1000/1050 = 95.2%
INFO replication
# role: master ← 角色(master/slave)
# connected_slaves: 2 ← 连接的从库数量4.5 启动时指定配置文件
Docker 方式
bash
# 创建自定义配置文件
cat > redis.conf << 'EOF'
maxmemory 128mb
maxmemory-policy allkeys-lru
requirepass mypassword
save 900 1
EOF
# 挂载配置文件启动
docker run -d --name redis-custom \
-p 6379:6379 \
-v $(pwd)/redis.conf:/usr/local/etc/redis/redis.conf \
redis:7 redis-server /usr/local/etc/redis/redis.conf本地方式
bash
redis-server /path/to/redis.conf常见错误
错误1:生产环境不设 maxmemory
# ❌ 默认 maxmemory=0(不限制)
# Redis 会一直占用内存直到 OOM(被系统杀死)
# ✅ 生产必设
maxmemory 2gb
maxmemory-policy allkeys-lru错误2:生产环境不设密码
# ❌ 无密码 + 公网暴露 → 被黑客入侵
# 很多 Redis 被黑用来挖矿!
# ✅ 设密码
requirepass "strong-password-here"错误3:FLUSHALL 误操作
bash
# ⚠️ 清空所有数据库!不可逆!
FLUSHALL
# 防护措施:
# 1. 生产环境 rename-command FLUSHALL ""
# 2. 权限控制(ACL)本章小结
- redis.conf 重点:
maxmemory/maxmemory-policy/requirepass/save/appendonly CONFIG GET/SET动态调整,CONFIG REWRITE持久化- 默认 16 个数据库,但生产不推荐用(用 Key 前缀区分)
INFO查看运行状态,关注 memory 和 stats- 生产必设:maxmemory、密码、淘汰策略
练习题
- 查看当前 Redis 的 maxmemory 和 maxmemory-policy 配置。
- 用 CONFIG SET 修改 maxmemory 为 128MB,然后用 CONFIG REWRITE 持久化。
- 用 SELECT 切换数据库,验证不同数据库的数据隔离。
- 用 INFO 查看 server、memory、stats、keyspace 信息。
- (思考题)Redis 的多数据库功能为什么在生产环境中几乎没人用?Cluster 模式下为什么不能用多数据库?