回答
Redis 的高性能是我们毋庸置疑的,但是 Redis 也会存在阻塞的情况,导致整个系统变慢,从而影响用户体验。以下几种场景会导致 Redis 阻塞。
一、慢查询
若 Redis 执行一个命令的时间超过指定的阈值(slowlog-log-slower-than
),则 Redis 会将该命令记录到慢查询日志中。
由于 Redis 执行命令是单线程,如果执行某个命令花费时间比较长,则会阻塞其他命令的执行,如果执行大量的慢查询,则会严重阻碍 Redis 服务的性能。
关于慢查询详情请阅读:了解 Redis 的慢查询吗?
二、操作大 key
大 key 是指 key 对应的 value 很大。大 key 可能导致 Redis 阻塞的情况有两种:
- 超时阻塞:由于 Redis 是单线程执行命令的,操作大 key 比较耗时,这会阻塞其他命令的执行。同时,如果我们要删除某个大 key,则需要一次性释放所有与该 key 相关联的内存,这是一个相当消耗 CPU 的过程。
- 网络阻塞:大 key 的数据量很大,每次获取的时候会占用大量的流量。