*Redis 性能优化指南

*概述

Redis 性能优化是保障系统高效运行的关键。本文档介绍 Redis 性能优化的常用方法和最佳实践,帮助您充分发挥 Redis 的性能潜力。

*内存优化

*1. 合理设置 maxmemory

redis.conf 中配置最大内存限制:

maxmemory 4gb
maxmemory-policy allkeys-lru

*2. 使用哈希类型存储小对象

当对象较小时,使用哈希类型可以显著节省内存:

HMSET user:1000 name "zhangsan" age 25 city "beijing"

*3. 启用内存碎片整理

Redis 4.0+ 支持主动内存碎片整理:

activedefrag yes
active-defrag-cycle-min 5
active-defrag-cycle-max 75

*命令优化

*1. 使用 Pipeline 批量操作

Pipeline 可以减少网络往返时间,提高吞吐量:

import redis

r = redis.Redis()
pipe = r.pipeline()
for i in range(1000):
    pipe.set(f"key:{i}", f"value:{i}")
pipe.execute()

*2. 避免使用 KEYS 命令

KEYS 命令会遍历所有键,在大数据量时会造成阻塞。使用 SCAN 替代:

SCAN 0 MATCH user:* COUNT 100

*3. 使用慢查询日志

配置慢查询日志,监控性能瓶颈:

slowlog-log-slower-than 10000
slowlog-max-len 128

*持久化优化

*1. RDB 优化

  • 合理设置 save 条件,避免过于频繁的快照
  • 使用 rdbcompression yes 启用压缩
  • 考虑关闭 RDB 仅使用 AOF(数据安全性要求高的场景)

*2. AOF 优化

  • 使用 appendfsync everysec 平衡性能和安全性
  • 启用 AOF 重写:auto-aof-rewrite-percentage 100
  • 定期执行 BGREWRITEAOF 压缩 AOF 文件

*网络优化

*1. 启用 TCP_NODELAY

tcp-nodelay yes

*2. 调整 TCP 连接保持

tcp-keepalive 300
timeout 300

*架构优化

*1. 读写分离

通过主从复制实现读写分离,减轻主节点压力:

# 从节点配置
replicaof 192.168.1.100 6379

*2. 分片集群

使用 Redis Cluster 实现数据分片,水平扩展:

# 集群配置
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

*3. 使用连接池

客户端使用连接池避免频繁创建连接:

import redis

pool = redis.ConnectionPool(host='localhost', port=6379, db=0, max_connections=100)
r = redis.Redis(connection_pool=pool)

*监控与诊断

*1. 使用 INFO 命令

INFO memory
INFO stats
INFO replication

*2. 使用 redis-cli --latency

redis-cli --latency -h 127.0.0.1 -p 6379

*3. 使用 redis-benchmark 测试

redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000

*操作系统优化

*1. 禁用透明大页

echo never > /sys/kernel/mm/transparent_hugepage/enabled

*2. 调整 vm.overcommit_memory

echo 1 > /proc/sys/vm/overcommit_memory

*3. 增加文件描述符限制

ulimit -n 65535

*总结

Redis 性能优化是一个系统工程,需要从内存管理、命令使用、持久化策略、网络配置、架构设计等多个维度综合考虑。建议定期监控 Redis 性能指标,及时发现和解决性能瓶颈。