注册

别把这些 Redis 操作写到生产环境


软件工程师在开发前要提前注意规避对 Redis 性能有影响的操作,避免走“先污染后治理”的老路。如下是整理出来6条会导致 Redis 性能下降的原因,尽量避免这些操作出现在生产环境中。


1. 大键和大值


存储大键或大值可能会消耗更多的内存,并且在 Redis 进行网络和磁盘 I/O 操作时可能会增加延迟。


创建一个大键和大值:


SET bigkey "a".repeat(5242880)  # 创建一个5MB的大值

2. 阻塞操作


某些 Redis 命令,如 BLPOPBRPOPBRPOPLPUSH,可能会阻塞 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. 使用复杂度高的命令


KEYSSMEMBERSHGETALL 这样的命令可能需要扫描整个集合,当数据集大时,它们可能会导致 Redis 暂时停止处理其他请求。


KEYS 命令,它会扫描整个键空间:


KEYS *

6. 内存使用过高


如果 Redis 服务器的内存使用接近或达到了其最大值,性能可能会受到影响。此外,如果你的数据集大于可用内存,那么操作系统可能会开始进行分页,这会大大降低 Redis 的性能。


使用 INFO memory 命令可以查看 Redis 的内存使用情况:


INFO memory

作者:Light_Tree
来源:juejin.cn/post/7248286946573205565

0 个评论

要回复文章请先登录注册