Redis sub/pub一次多次发布


Redis sub/pub multiple publishes at once

如果我有多个用户通过redis发布到一个频道,这是如何工作的?假设我有一个php脚本在数据库中添加一条记录。两个用户都订阅了同一个频道,并且同时向数据库输入一条记录。两者都使用php脚本将条目提交到数据库,一旦完成,我就使用php-redis将其发布到通道。但如果两个或更多的人同时做会发生什么呢?redis是否"锁定"第一个请求,然后"解锁"下一个请求?

Redis是单线程的,所以必须先执行一个命令,不需要锁。您通常不会注意到阻塞,因为单个请求所花费的大部分时间都在网络延迟上,而不是实际处理命令。

作为一个实际问题,您应该编写侦听器,使它们不假设任何给定通道上可能存在的重复消息,也不假设多个通道上消息的任何特定顺序。

换句话说,如果您有多个进程向给定通道生成消息,那么您不应该假设其中哪个进程将发布给定消息,或者多个这样的发布者是否可能存在竞争并发布某种副本。如果你需要这样的语义,你可能需要实现自己的锁使用Redis(原子)原语,如SETNX或HSETNX。