第七章:性能优化¶
内存优化¶
内存配置¶
淘汰策略¶
淘汰策略选项:
- volatile-lru: 淘汰最近最少使用的过期键
- allkeys-lru: 淘汰最近最少使用的所有键
- volatile-lfu: 淘汰最不经常使用的过期键
- allkeys-lfu: 淘汰最不经常使用的所有键
- volatile-random: 随机淘汰过期键
- allkeys-random: 随机淘汰所有键
- volatile-ttl: 淘汰即将过期的键
- noeviction: 不淘汰,内存满时返回错误
内存分析¶
# 查看内存使用
127.0.0.1:6379> info memory
used_memory:1073741824
used_memory_human:1.00G
used_memory_peak:2147483648
used_memory_peak_human:2.00G
# 查看大键
127.0.0.1:6379> memory usage user:1
(integer) 1024
# 分析键分布
redis-cli --bigkeys
网络优化¶
连接配置¶
# redis.conf
tcp-backlog 511 # TCP 连接队列
tcp-keepalive 300 # TCP 保活时间
timeout 0 # 客户端空闲超时
maxclients 10000 # 最大连接数
网络参数¶
# 系统网络参数
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
慢查询¶
# redis.conf
slowlog-log-slower-than 10000 # 慢查询阈值(微秒)
slowlog-max-len 128 # 慢查询日志长度
# 查看慢查询
127.0.0.1:6379> slowlog get 10
命令优化¶
批量操作¶
# 不推荐:多次单键操作
SET key1 value1
SET key2 value2
SET key3 value3
# 推荐:批量操作
MSET key1 value1 key2 value2 key3 value3
管道操作¶
# Python 管道
with rc.pipeline() as pipe:
for i in range(1000):
pipe.set(f'key:{i}', f'value:{i}')
pipe.execute()
避免阻塞命令¶
# 避免:阻塞命令
KEYS * # 阻塞,扫描所有键
HGETALL bigkey # 阻塞,获取大哈希
# 推荐:替代方案
SCAN 0 MATCH pattern COUNT 100
HSCAN bigkey 0
持久化优化¶
RDB 配置¶
# redis.conf
save 900 1 # 900秒内至少1次修改
save 300 10 # 300秒内至少10次修改
save 60 10000 # 60秒内至少10000次修改
rdbcompression yes # RDB 压缩
rdbchecksum yes # RDB 校验
AOF 配置¶
# redis.conf
appendonly yes # 启用 AOF
appendfsync everysec # 同步策略
auto-aof-rewrite-percentage 100 # 重写阈值
auto-aof-rewrite-min-size 64mb # 重写最小大小
混合持久化¶
集群优化¶
槽位平衡¶
# 检查槽位分布
redis-cli --cluster info 192.168.1.101:6379
# 平衡槽位
redis-cli --cluster rebalance 192.168.1.101:6379
节点优化¶
客户端优化¶
# Python 客户端优化
rc = RedisCluster(
startup_nodes=startup_nodes,
max_connections=100, # 连接池大小
socket_timeout=5, # Socket 超时
socket_connect_timeout=5, # 连接超时
retry_on_timeout=True, # 超时重试
)
性能测试¶
redis-benchmark¶
# 基准测试
redis-benchmark -h 192.168.1.101 -p 6379 -c 100 -n 100000
# 测试特定命令
redis-benchmark -h 192.168.1.101 -p 6379 -t set,get -n 100000
# 测试集群
redis-benchmark -h 192.168.1.101 -p 6379 --cluster -c 100 -n 100000
性能指标¶
小结¶
性能优化要点:
- 内存优化:内存配置、淘汰策略、内存分析
- 网络优化:连接配置、网络参数、慢查询
- 命令优化:批量操作、管道操作、避免阻塞
- 持久化优化:RDB、AOF、混合持久化
- 集群优化:槽位平衡、节点优化、客户端优化
- 性能测试:redis-benchmark、性能指标
下一章我们将学习生产实践。