我正在参与「启航方案」
软件工程师在开发前要提早注意躲避对 Redis 功能有影响的操作,防止走“先污染后治理”的老路。如下是整理出来6条会导致 Redis 功能下降的原因,尽量防止这些操作出现在生产环境中。
1. 大键和大值
存储大键或大值或许会消耗更多的内存,并且在 Redis 进行网络和磁盘 I/O 操作时或许会增加延迟。
创立一个大键和大值:
SET bigkey "a".repeat(5242880) # 创立一个5MB的大值
2. 堵塞操作
某些 Redis 指令,如 BLPOP
、BRPOP
、BRPOPLPUSH
,或许会堵塞 Redis 进程。同样,Lua 脚本执行时间过长也或许导致堵塞。
如下 BLPOP
操作会堵塞 Redis 直到有元素被推入列表或者超时:
BLPOP mylist 0 # 0表示无限期等候
3. 过期键的处理
假如有很多的键一起过期,Redis 的功能或许会受到影响,由于 Redis 需要在后台清理这些过期的键。
创立一个很多行将过期的键:
for i in range(100000):
EXPIRE key{i} 10 # 10秒后过期
4. 耐久化
Redis 提供了两种耐久化选项——RDB 和 AOF。RDB 是将当前进程数据生成快照保存的方式,而 AOF 是记载服务器收到的每一条写指令。频频的耐久化操作或许会增加磁盘 I/O 负载,然后影响功能。
启用 AOF 耐久化并配置为每次有数据修改都当即写入磁盘(或许会影响功能):
CONFIG SET appendonly yes
CONFIG SET appendfsync always
5. 运用复杂度高的指令
像 KEYS
、SMEMBERS
或 HGETALL
这样的指令或许需要扫描整个调集,当数据集大时,它们或许会导致 Redis 暂时中止处理其他恳求。
如 KEYS
指令,它会扫描整个键空间:
KEYS *
6. 内存运用过高
假如 Redis 服务器的内存运用挨近或达到了其最大值,功能或许会受到影响。此外,假如你的数据集大于可用内存,那么操作系统或许会开端进行分页,这会大大下降 Redis 的功能。
运用 INFO memory
指令可以查看 Redis 的内存运用情况:
INFO memory