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 批量、连接池复用
相关推荐
椰猫子2 小时前
数据库(数据库相关概念、MySQL数据库、SQL(DDL、DML、DQL))
数据库·sql·mysql
Shorasul2 小时前
golang如何实现设备数据采集网关_golang设备数据采集网关实现要点
jvm·数据库·python
2301_764150562 小时前
如何用 some 检测数组中是否存在至少一个满足条件的项
jvm·数据库·python
j_xxx404_2 小时前
数据库基础夯实:从零手写DDL与DML,MySQL核心语法实战解析
数据库·mysql
霸道流氓气质2 小时前
SpringBoot中集成LangChain4j+阿里百炼平台实现AI对话记忆功能、对话隔离、对话持久化到Redis功能
人工智能·spring boot·redis
爱学习的小囧2 小时前
VMware NSX-T Data Center 3.2.3.0 部署后账号密码获取及登录配置教程
linux·运维·服务器·网络·数据库·esxi
givemeacar2 小时前
spring session、spring security和redis整合的简单使用
redis·spring·bootstrap
xiaokangzhe2 小时前
NoSQL之Redis配置与优化
数据库
weixin_408717773 小时前
CSS如何优化大型项目样式_使用SASS预处理器提升开发效率
jvm·数据库·python