404 Not Found

404 Not Found


nginx

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-lruallkeys-lfu
  • 持久化场景:noevictionvolatile-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会:

  1. 读取原配置文件
  2. 用当前运行配置覆盖
  3. 保留注释和格式

重置配置

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

📖 小节

📝 作业

  1. 查看配置: 使用CONFIG GET查看你的Redis配置,找出maxmemory和maxmemory-policy的值
  2. 修改配置: 使用CONFIG SET修改maxmemory为128mb,然后用CONFIG REWRITE保存
  3. 场景配置: 为缓存场景编写一个Redis配置文件
  4. 禁用命令: 在配置文件中禁用FLUSHALL和FLUSHDB命令

下一课

下一课我们将学习 Redis 数据类型概览,了解Redis的5种基本数据类型。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏