Redis 配置
Redis的配置灵活强大,本课学习配置文件和常用配置项。
配置文件位置
不同安装方式,配置文件位置不同:
| 安装方式 | 配置文件位置 |
|---|---|
| apt安装(Ubuntu) | /etc/redis/redis.conf |
| yum安装(CentOS) | /etc/redis.conf |
| 源码安装 | 源码目录 redis.conf,需手动复制 |
| Homebrew(Mac) | /usr/local/etc/redis.conf |
| Windows | 安装目录 redis.windows.conf |
源码安装后创建配置文件
BASH
# 创建配置目录
sudo mkdir -p /etc/redis
# 复制配置文件
sudo cp /tmp/redis-7.0.11/redis.conf /etc/redis/redis.conf
# 创建数据目录
sudo mkdir -p /var/lib/redis
sudo chown redis:redis /var/lib/redis
配置文件格式
Redis配置文件采用简单的键值对格式:
CONF
# 这是注释
# 基本格式
配置项 值
# 示例
port 6379
bind 127.0.0.1
daemonize yes
💡 注意: 配置项和值之间用空格分隔,不需要等号。
核心配置项
网络配置
CONF
# 绑定的IP地址
# 127.0.0.1 仅本地访问
# 0.0.0.0 允许所有IP访问(危险!)
# 192.168.1.100 绑定特定IP
bind 127.0.0.1
# 监听端口
port 6379
# 保护模式(建议开启)
# yes:仅允许本地连接,除非设置了bind或密码
# no:允许远程连接
protected-mode yes
# TCP连接队列长度
tcp-backlog 511
# 客户端空闲多久断开连接(0表示不断开)
timeout 0
# TCP keepalive设置(秒)
tcp-keepalive 300
⚠️ 安全警告:
bind 0.0.0.0 允许所有IP访问,必须设置密码!
通用配置
CONF
# 是否后台运行
daemonize no
# 进程ID文件位置
pidfile /var/run/redis/redis-server.pid
# 日志级别
# debug:大量调试信息
# verbose:很多有用信息
# notice:适度信息(推荐生产环境)
# warning:仅重要信息
loglevel notice
# 日志文件位置
# 空字符串表示输出到标准输出
logfile /var/log/redis/redis-server.log
# 数据库数量(默认16个,编号0-15)
databases 16
内存管理
CONF
# 最大内存使用量
# 格式:1kb, 5mb, 2gb等
# 0表示不限制(危险!)
maxmemory 256mb
# 内存达到上限时的处理策略
# volatile-lru:删除设置了过期时间的键(LRU算法)
# allkeys-lru:删除所有键(LRU算法)
# volatile-lfu:删除设置了过期时间的键(LFU算法)
# allkeys-lfu:删除所有键(LFU算法)
# volatile-random:随机删除设置了过期时间的键
# allkeys-random:随机删除所有键
# volatile-ttl:删除即将过期的键
# noeviction:不删除,返回错误(默认)
maxmemory-policy allkeys-lru
# LRU/LFU采样数量
# 数值越大越精确,但消耗更多CPU
maxmemory-samples 5
💡 如何选择内存策略?
- 缓存场景:
allkeys-lru或allkeys-lfu - 持久化场景:
noeviction或volatile-lru
持久化配置(RDB)
CONF
# RDB快照触发条件
# save <秒数> <变化次数>
# 900秒内至少1次变化 → 触发快照
save 900 1
save 300 10
save 60 10000
# 禁用RDB(注释掉save或设为空)
# save ""
# RDB文件名
dbfilename dump.rdb
# RDB文件存储目录
dir /var/lib/redis
# RDB压缩(推荐开启)
rdbcompression yes
# RDB校验(推荐开启)
rdbchecksum yes
持久化配置(AOF)
CONF
# 开启AOF
appendonly no
# AOF文件名
appendfilename "appendonly.aof"
# AOF同步策略
# always:每次写入都同步(最安全,最慢)
# everysec:每秒同步一次(推荐)
# no:由操作系统决定(最快,最不安全)
appendfsync everysec
# AOF重写期间是否禁用fsync
no-appendfsync-on-rewrite no
# AOF文件大小触发重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
💡 RDB vs AOF:
- RDB:快照,文件小,恢复快,但可能丢失数据
- AOF:日志,数据安全,但文件大,恢复慢
- 推荐:同时开启RDB和AOF
安全配置
CONF
# 设置密码(Redis 6.0之前)
requirepass yourpassword
# 重命名危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
⚠️ 注意: Redis 6.0+ 推荐使用ACL权限控制,更灵活安全。
限制配置
CONF
# 最大客户端连接数
# 10000表示最多10000个客户端
maxclients 10000
# 最大输入缓冲区
client-query-buffer-limit 1gb
# 最大输出缓冲区
# normal:普通客户端
# replica:从节点
# pubsub:发布订阅客户端
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
使用CONFIG命令
Redis运行时可以查看和修改配置。
查看配置
REDIS
# 查看所有配置
127.0.0.1:6379> CONFIG GET *
# 返回配置项和值的交替列表
# 查看特定配置
127.0.0.1:6379> CONFIG GET port
1) "port"
2) "6379"
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "0"
# 查看多个配置(使用通配符)
127.0.0.1:6379> CONFIG GET maxmemory*
1) "maxmemory"
2) "0"
3) "maxmemory-policy"
4) "noeviction"
5) "maxmemory-samples"
6) "5"
修改配置
REDIS
# 设置最大内存
127.0.0.1:6379> CONFIG SET maxmemory 256mb
OK
# 设置日志级别
127.0.0.1:6379> CONFIG SET loglevel "debug"
OK
# 设置数据库数量
127.0.0.1:6379> CONFIG SET databases 32
OK
⚠️ 注意: CONFIG SET修改的配置立即生效,但重启后会丢失。需要使用CONFIG REWRITE保存到配置文件。
保存配置到文件
REDIS
# 将当前配置写入配置文件
127.0.0.1:6379> CONFIG REWRITE
OK
CONFIG REWRITE会:
- 读取原配置文件
- 用当前运行配置覆盖
- 保留注释和格式
重置配置
REDIS
# 重置统计信息
127.0.0.1:6379> CONFIG RESETSTAT
OK
常用配置场景
场景1:开发环境配置
CONF
bind 127.0.0.1
port 6379
daemonize no
logfile ""
databases 16
save ""
appendonly no
场景2:生产环境配置
CONF
bind 127.0.0.1
port 6379
daemonize yes
logfile /var/log/redis/redis.log
databases 16
# 内存管理
maxmemory 2gb
maxmemory-policy allkeys-lru
# 持久化
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
# 安全
requirepass your_strong_password
rename-command FLUSHALL ""
rename-command FLUSHDB ""
场景3:缓存服务器配置
CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 4gb
maxmemory-policy allkeys-lru
# 缓存场景不需要持久化
save ""
appendonly no
场景4:消息队列配置
CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 1gb
maxmemory-policy noeviction
# 消息队列需要持久化
appendonly yes
appendfsync everysec
使用命令行参数
启动Redis时可以覆盖配置文件:
BASH
# 覆盖单个配置
redis-server --port 6380
redis-server --maxmemory 512mb
redis-server --requirepass mypassword
# 覆盖多个配置
redis-server --port 6380 --maxmemory 512mb --daemonize yes
# 使用配置文件 + 覆盖部分配置
redis-server /etc/redis/redis.conf --port 6380
动态调整配置
调整内存限制
REDIS
# 查看当前内存使用
127.0.0.1:6379> INFO memory
used_memory:1048576
used_memory_human:1.00M
# 调整最大内存
127.0.0.1:6379> CONFIG SET maxmemory 512mb
OK
# 保存配置
127.0.0.1:6379> CONFIG REWRITE
OK
调整日志级别
REDIS
# 临时开启调试日志
127.0.0.1:6379> CONFIG SET loglevel debug
OK
# 调试完成后恢复
127.0.0.1:6379> CONFIG SET loglevel notice
OK
调整慢查询日志
REDIS
# 设置慢查询阈值(微秒)
127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 10000
OK
# 设置慢查询日志最大条数
127.0.0.1:6379> CONFIG SET slowlog-max-len 128
OK
# 查看慢查询日志
127.0.0.1:6379> SLOWLOG GET 10
配置验证
检查配置文件语法
BASH
# 启动时检查
redis-server /etc/redis/redis.conf --test-memory 100
查看运行配置
BASH
# 命令行查看
redis-cli CONFIG GET maxmemory
# 查看所有配置
redis-cli CONFIG GET *
❓ 常见问题
Q 修改配置后需要重启Redis吗?
A CONFIG SET修改的配置立即生效,不需要重启。但重启后会恢复,需要用CONFIG REWRITE保存。
Q 如何查看Redis默认配置?
A Redis源码中的
redis.conf 文件有详细的默认配置和说明。Q maxmemory设置为0会怎样?
A 0表示不限制内存,Redis会使用尽可能多的内存,可能导致OOM被系统杀死。
Q 如何禁用危险命令?
A 在配置文件中使用
rename-command FLUSHALL "",将命令重命名为空字符串。Q 配置文件可以包含其他配置文件吗?
A 可以,使用
include /path/to/other.conf。📖 小节
- 配置文件位置因安装方式而异,源码安装需手动复制
- 核心配置:网络、内存、持久化、安全
- CONFIG GET/SET 查看和修改运行时配置
- CONFIG REWRITE 保存配置到文件
- 不同场景使用不同配置策略
- 生产环境务必设置密码和内存限制
📝 作业
- 查看配置: 使用CONFIG GET查看你的Redis配置,找出maxmemory和maxmemory-policy的值
- 修改配置: 使用CONFIG SET修改maxmemory为128mb,然后用CONFIG REWRITE保存
- 场景配置: 为缓存场景编写一个Redis配置文件
- 禁用命令: 在配置文件中禁用FLUSHALL和FLUSHDB命令
下一课
下一课我们将学习 Redis 数据类型概览,了解Redis的5种基本数据类型。



