Nosql Redis配置与优化

一、基础配置(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 批量、连接池复用
相关推荐
记忆停留w6 小时前
从单体到微服务:Redis 协同 MySQL、Milvus、MinIO 搭建企业级RAG/AI Agent脚手架架构
大数据·人工智能·redis·微服务·ai·架构·milvus
小二·7 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手7 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌7 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
蓝天下的守望者8 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
上海云盾-小余8 小时前
网站频繁遭遇 SQL 注入溯源与原生漏洞修复全流程总结
数据库·sql
数据库小学妹8 小时前
国家区域医疗中心国产化改造实战:数据库选型、跨院区数据互通与踩坑经验
数据库·国产数据库·数据库选型·医疗信息化·信创数据库·医疗信创
AllData公司负责人9 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2603_9547083110 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全