一、基础配置(redis.conf)
1. 通用与守护进程
|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini daemonize yes # 后台运行 pidfile /var/run/redis_6379.pid logfile /var/log/redis/redis.log loglevel notice # 生产用 notice / warning databases 16 # 默认库数量(业务尽量用单库) |
2. 网络配置(高并发必备)
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini bind 0.0.0.0 # 监听所有IP(按需限制) port 6379 tcp-backlog 511 # 与内核 net.core.somaxconn 一致 tcp-keepalive 300 # 检测死连接(秒) timeout 0 # 客户端空闲不主动断开 maxclients 65535 # 最大连接数(配合系统 ulimit -n 65535) |
3. 内存核心配置(最关键)
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini maxmemory 12gb # 物理内存 70%~80%(16G内存设12G) maxmemory-policy allkeys-lru # 缓存场景首选 # 策略说明: # allkeys-lru 所有key用LRU淘汰(通用缓存) # volatile-lru 仅带TTL的key LRU(混合存储) # allkeys-lfu 访问频率最少淘汰(热点明显场景) # noeviction 不淘汰,满了直接报错(强一致持久化) # 内存碎片整理(Redis 4.0+) activedefrag yes active-defrag-threshold-lower 10 active-defrag-threshold-upper 50 # 惰性删除(避免大key删除阻塞) lazyfree-lazy-eviction yes lazyfree-lazy-expire yes lazyfree-lazy-server-del yes |
4. 持久化配置(性能 vs 安全)
(1)RDB 快照(备份、恢复快)
|----------------------------------------------------------------------------------------------------------------------------------|
| ini save 900 1 save 300 10 save 60 10000 # 纯缓存可关闭:save "" rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data/redis |
(2)AOF 日志(数据安全高)
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini appendonly yes # 生产建议开启 appendfilename "appendonly.aof" # 刷盘策略(三选一) # appendfsync always # 最安全、最慢(金融强一致) appendfsync everysec # 折中(生产推荐) # appendfsync no # 最快、丢数据多 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 混合持久化(Redis 4.0+ 最佳实践) aof-use-rdb-preamble yes |
5. 多线程 IO
|----------------------------------------------------------------------|
| ini io-threads 4 # CPU核心数的 1~2 倍 io-threads-do-reads yes # 读请求也用多线程 |
6. 慢查询与超时
|-----------------------------------------------------------------------------------------------|
| ini slowlog-log-slower-than 10000 # 10ms 以上记录慢查询 slowlog-max-len 128 hz 100 # 定时任务频率(过期清理更及时) |
7. 安全配置
|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini requirepass 你的强密码 # 必设 rename-command CONFIG "" # 禁用危险命令 rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command KEYS "" # 禁止 KEYS * |
二、性能优化
1. 内存优化
- maxmemory 必须设:不设会 OOM 被系统杀死。
- 淘汰策略:
- 纯缓存 → allkeys-lru / allkeys-lfu
- 缓存 + 持久化 → volatile-lru
- 强一致存储 → noeviction
- 内存碎片:
- 监控 mem_fragmentation_ratio > 1.5 需优化
- 开启 activedefrag 或定期重启
- 内存使用技巧:
- 小对象用 Hash 替代多个 String
2. 持久化优化
- 混合持久化(4.0+) :aof-use-rdb-preamble yes
- AOF 重写时先写 RDB 再追加 AOF,恢复极快、数据安全
- RDB:低峰备份,避免频繁 save
- AOF:
- 高并发用 everysec
- 关闭 appendfsync always 除非必须强一致
3. 网络与连接优化
- TCP 参数(内核):
|------------------------------------------------------------------------------------|
| ini net.core.somaxconn = 511 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 |
- 客户端:
- 使用 连接池(JedisPool/Lettuce)
- 避免频繁断连 / 新建连接
- 批量操作:
- Pipeline 打包命令(减少 RTT)
- MGET/MSET 替代多次 GET/SET
4. 线程与 CPU 优化
- Redis 6.0+ 开启多线程 IO
|------------------------------------------|
| ini io-threads 4 io-threads-do-reads yes |
- 绑定 CPU(隔离核):taskset -c 2-5 redis-server
- 避免与其他服务争抢 CPU
5. 数据结构最佳实践
- 简单 KV、计数器 → String
- 对象、属性集 → Hash
- 消息队列、栈 → List
- 去重、交集 → Set
- 排行榜、有序队列 → Sorted Set
- 消息流、精确消费 → Stream
三、系统层面优化
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini # 1. 内存与Swap vm.swappiness = 0 # 尽量不用Swap vm.overcommit_memory = 1 # Redis 要求 # 2. 文件句柄 ulimit -n 65535 # 3. 透明大页(THP)禁用 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 4. 文件系统 # 数据盘用 ext4/xfs,关闭 atime mount -o noatime # 5. 内核TCP net.ipv4.tcp_max_syn_backlog = 511 |
四、监控指标
- info memory
- used_memory、maxmemory、mem_fragmentation_ratio
- info stats
- keyspace_hits /keyspace_misses(命中率 >95%)
- evicted_keys(淘汰数)
- info persistence
- aof_pending_bio_fsync、rdb_bgsave_in_progress
- slowlog get 10(慢查询)
- 连接数、QPS、延迟
五、场景化配置建议
场景 1:纯缓存(如会话、页面缓存)
- maxmemory-policy allkeys-lru
- appendonly no(或仅 RDB)
- 允许一定淘汰,追求性能
场景 2:持久化存储(如配置、订单)
- maxmemory-policy noeviction
- appendonly yes + everysec
- aof-use-rdb-preamble yes
- 定期备份 RDB
场景 3:高并发读写(电商、直播)
- 多线程 IO io-threads 4~8
- maxclients 65535
- Pipeline 批量、连接池复用