Redis sub / pub多次发布

时间:2011-08-02 20:44:48

标签: php redis

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

作为一个实际问题,您应该编写您的听众,使他们不会对任何给定频道上可能存在的重复消息做出任何假设,并且他们不会假设通过多个频道对消息进行任何特定排序。

换句话说,如果您有多个进程生成给定通道的消息,那么您不应该假设哪些进程会发布给定的消息,或者多个这样的发布者是否可能有比赛并发布某种类型的重复。如果您需要这样的语义,您可能需要使用Redis(原子)基元(如SETNX或HSETNX)实现自己的锁定。