避免执行时间复杂度高的命令

我们知道 Redis 是「单线程」执行命令的。执行时间复杂度高的命令,很可能会阻塞其它请求。

复杂度高的命令和元素数量有关。通常有以下两种场景。

  1. 元素太多,消耗 IO 资源。如 HGETALL、LRANGE,时间复杂度为 O(N)。

  2. 计算过于复杂,消费 CPU 资源。如 ZUNIONSTORE,时间复杂度为 O(N)+O(M log(M))

Redis 官方手册,标记了命令执行的时间复杂度。建议你在使用不熟悉的命令前,先查看手册,留意时间复杂度。

实际业务中,你应该尽量避免时间复杂度高的命令。如果必须要用,有两点建议

  1. 保证操作的元素数量,尽可能少。

  2. 读写分离。复杂命令通常是读请求,可以放到「slave」结点执行。