Skip to content
清晨的一缕阳光
返回

Redis 核心配置详解

Redis 核心配置详解

Redis 配置文件 redis.conf 包含了数百个配置项,合理配置对 Redis 的性能、稳定性和安全性至关重要。本文将深入解析 Redis 核心配置项,帮助你打造高性能的 Redis 服务。

一、配置文件基础

1.1 配置文件位置

# 默认配置文件位置
/etc/redis/redis.conf          # Linux 包安装
/usr/local/etc/redis.conf      # macOS Homebrew
redis.conf                     # 源码编译

# 查看 Redis 配置
redis-cli CONFIG GET *         # 获取所有配置
redis-cli CONFIG GET maxmemory # 获取特定配置

1.2 配置文件结构

# Redis 配置文件示例

# 网络配置
port 6379
bind 127.0.0.1

# 内存配置
maxmemory 2gb
maxmemory-policy allkeys-lru

# 持久化配置
save 900 1
save 300 10
save 60 10000

# 安全配置
requirepass your_password

二、内存管理配置

2.1 最大内存限制

# 设置 Redis 最大内存使用量
maxmemory <bytes>

# 示例
maxmemory 2gb        # 2GB
maxmemory 512mb      # 512MB
maxmemory 0          # 不限制(默认,不推荐生产环境)

配置建议

2.2 内存淘汰策略

# 内存淘汰策略
maxmemory-policy <policy>

# 可选策略
maxmemory-policy noeviction          # 不淘汰,写操作返回错误(默认)
maxmemory-policy allkeys-lru         # 淘汰最近最少使用的键(推荐)
maxmemory-policy volatile-lru        # 淘汰最近最少使用的有过期时间的键
maxmemory-policy allkeys-random      # 随机淘汰键
maxmemory-policy volatile-random     # 随机淘汰有过期时间的键
maxmemory-policy volatile-ttl        # 淘汰剩余时间最短的键

策略对比

策略适用场景性能
allkeys-lru缓存场景⭐⭐⭐⭐⭐
volatile-lru混合数据⭐⭐⭐⭐
allkeys-random均匀访问⭐⭐⭐
volatile-ttl定时任务⭐⭐
noeviction数据完整性要求高

配置建议

# 缓存场景推荐
maxmemory-policy allkeys-lru

# LRU 采样优化
maxmemory-samples 10  # 采样数量,越大越精确,越小越 CPU 友好

2.3 内存碎片管理

# 内存碎片整理
activedefrag yes                # 启用主动碎片整理
active-defrag-ignore-bytes 100mb # 碎片超过 100MB 开始整理
active-defrag-threshold-lower 10 # 碎片率低于 10% 不整理
active-defrag-threshold-upper 100 # 碎片率高于 100% 最大化整理
active-defrag-cycle-min 1       # 整理占用 CPU 时间最小百分比
active-defrag-cycle-max 25      # 整理占用 CPU 时间最大百分比

三、网络配置

3.1 端口与绑定

# 监听端口
port 6379

# 绑定地址
bind 127.0.0.1              # 仅本地访问
bind 0.0.0.0                # 所有网络接口(不推荐)
bind 192.168.1.100          # 特定 IP

# 保护模式
protected-mode yes          # 启用保护模式(推荐)

安全建议

3.2 TCP 配置

# TCP 连接配置
tcp-backlog 511             # TCP 连接队列长度
tcp-keepalive 300           # TCP keepalive 间隔(秒)
timeout 0                   # 客户端超时(0=不超时)

# 高性能配置
tcp-backlog 65535           # 高并发场景
tcp-keepalive 60            # 更频繁的 keepalive

3.3 慢查询日志

# 慢查询配置
slowlog-log-slower-than 10000  # 记录超过 10ms 的查询(微秒)
slowlog-max-len 128            # 慢查询日志最大长度

# 查看慢查询
redis-cli SLOWLOG GET 10       # 获取最近 10 条慢查询
redis-cli SLOWLOG LEN          # 获取慢查询数量
redis-cli SLOWLOG RESET        # 清空慢查询日志

四、持久化配置

4.1 RDB 配置

# RDB 快照配置
save 900 1        # 900 秒内至少 1 个键变化
save 300 10       # 300 秒内至少 10 个键变化
save 60 10000     # 60 秒内至少 10000 个键变化

# RDB 文件配置
dbfilename dump.rdb                    # RDB 文件名
dir /var/lib/redis                     # 数据目录
rdbcompression yes                     # 启用压缩
rdbchecksum yes                        # 启用校验和

# 停止保存
save ""                                # 禁用 RDB

4.2 AOF 配置

# AOF 持久化
appendonly no                          # 禁用 AOF(默认)
appendonly yes                         # 启用 AOF

# AOF 文件名
appendfilename "appendonly.aof"

# AOF 同步策略
appendfsync always                     # 每次写入都同步(最安全,最慢)
appendfsync everysec                   # 每秒同步(推荐)
appendfsync no                         # 由操作系统决定(最快,不安全)

# AOF 重写
auto-aof-rewrite-percentage 100        # AOF 增长 100% 触发重写
auto-aof-rewrite-min-size 64mb         # AOF 最小 64MB 才重写
aof-load-truncated yes                 # 加载截断的 AOF 文件

同步策略对比

策略数据安全性性能推荐场景
always不丢失数据金融场景
everysec最多丢失 1 秒一般场景(推荐)
no可能丢失大量数据缓存场景

4.3 混合持久化

# Redis 4.0+ 混合持久化
aof-use-rdb-preamble yes    # AOF 使用 RDB 格式前缀(推荐)

优势

五、安全配置

5.1 密码认证

# 设置密码
requirepass your_strong_password

# 多密码配置(Redis 6+)
acl setuser default on >your_password ~* &* +@all

安全建议

5.2 命令重命名

# 禁用危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""

# 重命名命令
rename-command SHUTDOWN SHUTDOWN_b4d5f6

5.3 ACL 访问控制(Redis 6+)

# 创建用户
acl setuser webuser on >web_password ~app:* +@read +@write -@dangerous

# 用户权限
# on/off: 启用/禁用
# >password: 密码
# ~pattern: 键模式
# +@category: 命令类别

六、性能优化配置

6.1 客户端配置

# 最大客户端连接数
maxclients 10000

# 输出缓冲区限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

6.2 集群配置

# 集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-replica-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

6.3 懒删除配置

# 懒删除(Redis 4.0+)
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

启用场景

# 大键删除场景
lazyfree-lazy-eviction yes    # 内存淘汰时懒删除
lazyfree-lazy-expire yes      # 过期键懒删除
lazyfree-lazy-server-del yes  # 服务器删除时懒删除

七、生产环境配置模板

7.1 缓存场景配置

# 基础配置
port 6379
bind 127.0.0.1
protected-mode yes
timeout 300
tcp-keepalive 60

# 内存配置
maxmemory 4gb
maxmemory-policy allkeys-lru
maxmemory-samples 10

# 持久化(可选)
save ""
appendonly no

# 安全配置
requirepass YourStrongPassword123!
rename-command FLUSHALL ""
rename-command CONFIG ""

# 性能配置
maxclients 10000
slowlog-log-slower-than 10000
slowlog-max-len 128

# 日志
loglevel notice
logfile /var/log/redis/redis.log

7.2 持久化场景配置

# 基础配置
port 6379
bind 127.0.0.1
protected-mode yes

# 内存配置
maxmemory 8gb
maxmemory-policy volatile-lru

# RDB 持久化
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
rdbcompression yes
rdbchecksum yes

# AOF 持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-use-rdb-preamble yes

# 安全配置
requirepass YourStrongPassword123!

八、配置检查与优化

8.1 配置检查命令

# 检查配置
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy
redis-cli CONFIG GET appendonly

# 动态修改配置
redis-cli CONFIG SET maxmemory 4gb
redis-cli CONFIG SET maxmemory-policy allkeys-lru

# 持久化配置修改
redis-cli CONFIG REWRITE

8.2 性能诊断

# 内存使用
redis-cli INFO memory

# 统计信息
redis-cli INFO stats

# 客户端信息
redis-cli CLIENT LIST

# 慢查询
redis-cli SLOWLOG GET 10

# 延迟测试
redis-cli --latency
redis-cli --latency-history

九、常见问题

Q1: 内存满了怎么办?

# 检查内存使用
redis-cli INFO memory

# 解决方式 1: 增加内存
CONFIG SET maxmemory 8gb

# 解决方式 2: 调整淘汰策略
CONFIG SET maxmemory-policy allkeys-lru

# 解决方式 3: 手动清理
redis-cli MEMORY DOCTOR  # 内存诊断

Q2: AOF 文件过大?

# 触发 AOF 重写
redis-cli BGREWRITEAOF

# 检查 AOF 状态
redis-cli INFO persistence

Q3: 慢查询过多?

# 查看慢查询
redis-cli SLOWLOG GET 100

# 优化建议
# 1. 避免大键操作
# 2. 使用批量操作
# 3. 调整 slowlog-log-slower-than
CONFIG SET slowlog-log-slower-than 20000

总结

Redis 配置要点总结:

配置类别关键配置推荐值
内存maxmemory物理内存 70-80%
淘汰策略maxmemory-policyallkeys-lru
持久化appendfsynceverysec
安全requirepass强密码
网络tcp-keepalive60
慢查询slowlog-log-slower-than10000

最佳实践

  1. 生产环境必须设置 maxmemory
  2. 启用密码认证和访问控制
  3. 根据场景选择合适的持久化方式
  4. 定期检查和优化配置
  5. 监控慢查询和内存使用

合理配置 Redis,能让你的服务更稳定、更高效!

参考资料


分享这篇文章到:

上一篇文章
常见问题排查
下一篇文章
分布式任务调度