示例:使用从服务器处理复杂计算操作

Redis 的数据相关命令基本上可以划分为两个种类:

  • 第一种是简单的读写操作,比如 GET 命令、 SET 命令、 ZADD 命令等等,这种命令只需要对数据库进行简单的读写,它们的执行速度一般都非常快。

  • 第二种是比较复杂的计算操作,比如 SUNION 命令、 ZINTERSTORE 命令、 BITOP 命令等等,这种命令需要对数据库中的元素进行聚合计算,并且随着元素数量的增加,计算耗费的时间也会增加,因此这种命令的执行速度一般都比较慢。

从效率的角度考虑,如果我们在同一个 Redis 服务器里面同时处理以上两种命令,那么执行第二种命令产生的阻塞时间将导致第一种命令执行时的延迟值显著地增加。

为此,我们可以通过复制功能创建出当前服务器的从服务器,然后让主服务器只处理第一种命令,而第二种命令则交给从服务器处理,如图 18-6 所示。


图 18-6 使用从服务器执行计算命令

之前:使用服务器处理简单的读写命令和计算命令

_images/IMAGE_SPEEDUP_CMD_1.png

之后:使用主服务器处理简单的读写命令,使用从服务器处理计算命令

_images/IMAGE_SPEEDUP_CMD_2.png


为了能够在从服务器执行诸如 ZINTERSTORE 这样的写命令,我们需要把从服务器的可写特性打开,并且在将计算结果储存到从服务器之后,为它设置一个比较短的过期时间,使得结果可以自动过期。又或者在客户端获得结果之后,由客户端将结果写入到主服务器进行保存。

如果只使用一个从服务器处理第二种命令的速度还不够快,我们可以继续增加从服务器,直到从服务器处理第二种命令的速度和延迟值达到我们的要求为止。