【发布时间】:2016-07-15 09:30:24
【问题描述】:
我们知道KEYS命令会阻塞Redis服务器,需要改用*SCAN命令。
据我了解,Redis 服务器可以处理大量 pubsub 连接。那么,如果我在这样的服务器上调用PUBSUB CHANNELS 命令,它可以在执行此命令期间处理 pubsub 连接或处理其他命令吗?
【问题讨论】:
我们知道KEYS命令会阻塞Redis服务器,需要改用*SCAN命令。
据我了解,Redis 服务器可以处理大量 pubsub 连接。那么,如果我在这样的服务器上调用PUBSUB CHANNELS 命令,它可以在执行此命令期间处理 pubsub 连接或处理其他命令吗?
【问题讨论】:
Redis 是单线程的。它可以有任意数量的客户端,但正在执行的命令是单线程的(一个接一个)。
在 PUBSUB 中,您订阅了一个客户端,该客户端将保持与服务器的连接。
当您发布一条消息时,它会传递到所有订阅的频道,所以基本上它是一个单独的调用,它会发布到该调用本身的所有频道。因此,如果您有多个客户(例如一百万)订阅单个频道,则需要一些时间才能发布到所有这些客户,那么是的,它是阻塞的。另请注意,阻塞只会在发布操作期间发生。
希望这能回答您的问题。
【讨论】: