常规配置
Redis服务基本配置,包括网络、日志、数据库等
是否以守护进程方式运行Redis
说明
如果设置为yes,Redis将以守护进程方式在后台运行。生产环境通常设置为yes,开发环境可设置为no以便查看日志输出。
配置示例
daemonize yes
# 开发环境,前台运行
daemonize no
Redis服务监听端口
说明
Redis服务监听的TCP端口。设置为0表示不监听任何端口,仅通过Unix socket通信。
配置示例
port 6379
# 自定义端口
port 6380
# 禁用TCP端口,仅使用Unix socket
port 0
绑定监听的网络接口
说明
指定Redis监听哪些网络接口。生产环境强烈建议绑定到内网IP,不要使用0.0.0.0暴露到公网。可以绑定多个IP,用空格分隔。
安全警告: 设置为0.0.0.0将使Redis对所有网络接口开放,存在安全风险!
配置示例
bind 127.0.0.1 ::1
# 绑定到内网IP
bind 192.168.1.100
# 绑定多个IP
bind 127.0.0.1 192.168.1.100
# 危险!暴露到所有网络接口
bind 0.0.0.0
客户端空闲超时时间
说明
客户端空闲N秒后关闭连接(0表示不关闭)。用于释放长时间空闲的连接,防止连接数过多。
配置示例
timeout 0
# 300秒后关闭空闲连接
timeout 300
内存管理
内存限制、淘汰策略和优化配置
Redis最大内存限制
说明
设置Redis可以使用的最大内存量。达到限制后,根据maxmemory-policy策略进行数据淘汰。生产环境必须设置此值,防止Redis占用所有系统内存。
重要: 建议设置为系统内存的70-80%,为操作系统和复制缓冲区留出空间。
配置示例
maxmemory 0
# 限制为1GB
maxmemory 1gb
# 或
maxmemory 1073741824
# 限制为系统内存的75%
maxmemory 12gb
# 假设系统有16GB内存
常用单位
| 单位 | 示例 | 字节值 |
|---|---|---|
| k, kb | maxmemory 100kb | 102,400 |
| m, mb | maxmemory 256mb | 268,435,456 |
| g, gb | maxmemory 1gb | 1,073,741,824 |
| (无单位) | maxmemory 1000000 | 1,000,000 |
内存达到上限时的数据淘汰策略
说明
当内存达到maxmemory限制时,Redis将根据此策略淘汰数据。选择合适的策略对应用性能至关重要。
淘汰策略
| 策略 | 说明 | 适用场景 |
|---|---|---|
noeviction |
不淘汰,新写入操作会报错 | 不允许数据丢失的场景 |
allkeys-lru |
从所有key中淘汰最近最少使用的 | 推荐,通用场景 |
volatile-lru |
从设置了过期时间的key中淘汰LRU | 部分数据允许过期 |
allkeys-random |
从所有key中随机淘汰 | 所有数据同等重要 |
volatile-random |
从设置了过期时间的key中随机淘汰 | 随机淘汰过期数据 |
volatile-ttl |
淘汰剩余生存时间最短的key | 优先淘汰即将过期的数据 |
allkeys-lfu |
从所有key中淘汰最不经常使用的 | 4.0+,推荐用于热点数据 |
volatile-lfu |
从设置了过期时间的key中淘汰LFU | 4.0+,热点数据且有有效期 |
配置示例
maxmemory-policy allkeys-lru
# Redis 4.0+:使用LFU淘汰策略
maxmemory-policy allkeys-lfu
持久化配置
RDB快照和AOF日志配置
RDB快照保存条件
说明
配置RDB持久化的触发条件。格式为"seconds changes",表示在seconds秒内有changes次修改时自动保存快照。可以配置多个条件。
默认配置解释
save 900 1
900秒内至少有1个key被修改
save 300 10
300秒内至少有10个key被修改
save 60 10000
60秒内至少有10000个key被修改
配置示例
save ""
# 每5分钟如果有至少100个key变化则保存
save 300 100
# 多个条件
save 3600 1 300 100 60 10000
是否开启AOF持久化
说明
AOF(Append Only File)记录每个写操作,重启时重新执行这些操作来恢复数据。相比RDB,AOF提供更好的持久性保证,但文件更大,恢复更慢。
推荐: 生产环境建议同时开启RDB和AOF,利用RDB快速恢复,AOF保证数据完整性。
配置示例
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
AOF文件同步策略
说明
控制AOF文件同步到磁盘的频率,影响性能和数据安全性的平衡。
同步策略
| 策略 | 说明 | 性能 | 数据安全性 |
|---|---|---|---|
always |
每个写命令都同步到磁盘 | 慢 | 最高 |
everysec |
每秒同步一次 | 中等 | 中等 |
no |
由操作系统决定何时同步 | 快 | 低 |
配置示例
appendfsync everysec
# 最高数据安全性,但性能较差
appendfsync always
性能调优
优化Redis性能的关键参数
性能指标
调优建议
- 启用内存淘汰策略避免OOM
- 使用Pipeline减少网络往返
- 合理设置maxclients限制连接数
- 使用AOF重写压缩日志文件
最大客户端连接数
说明
设置同时连接到Redis的最大客户端数量。达到限制后,新连接会被拒绝。需要根据服务器资源和实际需求调整。
提示: 每个连接大约占用10KB内存,10000个连接约占用100MB内存。
配置示例
maxclients 10000
# 限制为5000个连接
maxclients 5000
# 高并发场景,20000个连接
maxclients 20000
TCP keepalive检测间隔
说明
如果设置为非零值,则使用SO_KEEPALIVE向客户端发送TCP ACK,用于检测空闲连接是否仍然存活。有助于清理因网络问题导致的僵尸连接。
配置示例
tcp-keepalive 300
# 每60秒检测一次(更频繁)
tcp-keepalive 60
# 禁用TCP keepalive
tcp-keepalive 0
配置示例
完整的Redis配置文件示例
生产环境配置示例
适用于高可用、高并发的生产环境
# 常规配置
port 6379
bind 192.168.1.100
daemonize yes
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/var/log/redis/redis.log"
databases 16
timeout 300
tcp-keepalive 60
# 内存管理
maxmemory 8gb
maxmemory-policy allkeys-lru
maxmemory-samples 5
# 持久化
save 900 1 300 10 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
# AOF配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 性能调优
maxclients 10000
hz 10
tcp-backlog 511
# 安全配置
requirepass "YourStrongPassword123!"
# rename-command FLUSHALL "" # 禁用危险命令
# rename-command FLUSHDB ""
# rename-command CONFIG ""
配置说明
- 绑定到内网IP,增强安全性
- 设置8GB内存限制和LRU淘汰策略
- 同时启用RDB和AOF持久化
- AOF每秒同步,平衡性能和数据安全
- 设置连接密码,提高安全性
- 可选的危险命令禁用
开发环境配置示例
适用于本地开发和测试环境
# 常规配置
port 6379
bind 127.0.0.1
daemonize no
loglevel verbose
logfile ""
databases 16
# 内存管理(宽松)
maxmemory 512mb
maxmemory-policy allkeys-lru
# 持久化(简化)
save 900 1
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump.rdb
dir ./
# AOF配置(可选)
# appendonly no
# 性能调优(默认)
maxclients 10000
# 安全配置(简化)
# requirepass ""
# 其他
timeout 0
tcp-keepalive 0
配置说明
- 前台运行,方便查看日志
- 仅绑定到localhost,安全性足够
- 宽松的内存限制(512MB)
- 简化持久化配置
- 默认禁用AOF,减少磁盘IO
- 不设置密码,方便连接