当前位置: 首页 > news >正文

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-policyallkeys-lru
  • appendonlyno(或仅 RDB)
  • 允许一定淘汰,追求性能

场景 2:持久化存储(如配置、订单)

  • maxmemory-policynoeviction
  • appendonlyyes+everysec
  • aof-use-rdb-preambleyes
  • 定期备份 RDB

场景 3:高并发读写(电商、直播)

  • 多线程 IOio-threads 4~8
  • maxclients65535
  • Pipeline 批量、连接池复用
http://www.jsqmd.com/news/658432/

相关文章:

  • 显卡驱动彻底清理指南:Display Driver Uninstaller完全教程
  • 2026奇点大会AIAPI代码生成性能基准测试全解析,TensorRT-LLM vs vLLM vs 自研推理引擎的毫秒级差距
  • 龙芯中科与麒麟软件达成深度战略合作
  • 别再让机械臂‘抖’了!用Matlab手把手教你实现输入整形(附完整代码)
  • 从Kaggle心脏病数据到临床辅助决策:一个统计学习驱动的分类预测实践
  • 博图V17连不上S7-1200?从ERROR灯常亮到‘未决启动禁止’的完整复位指南
  • LongMemEval 基准实测!Awareness 长时记忆能力登顶
  • AI生成代码如何不毁掉Git历史:7个被90%团队忽略的版本控制红线
  • Equalizer APO深度解析:Windows系统级音频均衡器完整方案
  • Android车机蓝牙开发避坑指南:如何正确配置A2DP Sink与HFP Client模式(附源码修改点)
  • 3步搞定!用JavaScript自动生成专业PPT的完整指南
  • 直播喊到嗓子哑?光圈智播语音助手:直播间的 “虚拟助播”
  • 数据采集,hook window,cookie
  • 背包定制完全指南:从想法到成品,一次说清所有细节
  • leaflet地图标注在缩放时位置偏移报错与leaflet.draw中文本地化配置
  • 告别手动拉群!企微关键词自动进群实战教程,引流转化翻倍
  • html如何修改备注
  • gprMax完整指南:从零开始掌握地质雷达电磁波仿真
  • SITS2026闭门会议纪要流出:生成算法合规红线已划定,3月1日起生效,你的模型过审了吗?
  • atsec成为EMVCo认可的安全评估实验室
  • (基于Arduino)ESP8266 EEPROM实战:从基础存储到智能设备配置的持久化方案
  • 下载数据集
  • Solon AI v3.13 发布(智能体开发框架,支持 Java8 到 Java26)
  • 如何用AI视频分析工具快速理解视频内容:完整指南
  • 【电子通识】是电子世界的“硬通货”——嵌入式工程师必懂的优先数系
  • 利用AI优化java系统入门和注意点
  • OpenClaw 技能太多不知道装哪个?按这份清单从上往下装就行
  • 如何设计一个支持“全文检索”的应用程序?
  • 使用Java代码,httpclient调用彩云天气接口-token版本
  • LangGraph 循环节点避坑:5个导致死循环的错误与终止条件设计