请教下 redis 的 pubsub 有什么作用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TangMonk
V2EX    Redis

请教下 redis 的 pubsub 有什么作用?

  •  
  •   TangMonk 2014-07-28 22:03:49 +08:00 9904 次点击
    这是一个创建于 4166 天前的主题,其中的信息可能已经有所发展或是发生改变。
    进程间通讯?还是做及时消息推送?
    8 条回复    2014-07-29 17:26:17 +08:00
    TangMonk
        1
    TangMonk  
    OP
       2014-07-28 22:13:10 +08:00
    我使用 socket.io 来做消息推送的。。感觉用不到这个功能,不太明白到底是干嘛的。。。

    从 wikipeda 的 Publishsubscribe pattern ,看到 Messaging pattern, 还有 Message queue

    其中的 「进程间通讯」、「消息队列」。。这些个名词搞不懂啊

    消息队列是干嘛的?用来做即使消息推送的,然后作为用户的消息列表吗?
    HunterPan
        2
    HunterPan  
       2014-07-28 22:16:36 +08:00
    推送订阅消息
    TangMonk
        3
    TangMonk  
    OP
       2014-07-28 22:20:27 +08:00
    @HunterPan 咳咳。。麻烦您能详细解说下吗。。虽然你言简意赅,但是我还是没懂。。
    kaichen
        4
    kaichen  
    PRO
       2014-07-28 22:48:17 +08:00   9
    Pub/Sub模式比较常见的应用还是解耦两个系统吧,比如我有两个程序,可能是不同编程语言构建的,可能是在不同的机器上运行的,那么利用这个模式,可以比较简单地实现这两个程序之间的通讯。

    消息队列,就是用来解耦系统的,以消息生产者和消息消费者的角色来定义两个系统。

    举个例子,假如V2EX有个徽章的功能,当你抢沙发超过10次时,能获得一个「抢沙发小能手」的徽章。那么一般来说,代码会这么写,先创建这条回复,然后检查是否为该主题的第一个回复,如果是,对用户抢到沙发次数加1,最后判断用户抢到沙发次数是否大于10次,如果是则发放徽章。

    那么,当回复里包含的逻辑越多时(比如还要通知被回复者),回复这个功能的代码会越复杂。此时如果我们采用消息队列,那么可以只是简单地创建回复记录,然后**发布一个回复被创建的消息**到消息队列。而检查是否发放徽章的**消息订阅程序**,会收到前面创建的这条消息,然后去做相应的检查逻辑。

    通过这样解耦,添加回复这块代码会变得清晰,因为这里只负责创建这条记录,并发布这个消息出去,无须关心还有哪些逻辑。而处理剩下逻辑的部分,也相当清晰,因为一个消息订阅者只处理一个逻辑。单一的逻辑非常容易进行单元测试,但是这样同时会让系统分离成好多部分,变得复杂,故只有当你的逻辑相当复杂,并且需要提高扩展性,获得更好的性能的时候才会用到这个模式。

    不知道这个例子是否清楚,希望能帮你理解。
    20150517
        5
    20150517  
       2014-07-29 00:09:02 +08:00 via Android   1
    我的理解,可能不正确,这就是个可以跨服务器的发布者与订阅者的关系,比如你触发了一件事,你希望通知所有监听的服务器,redis这个就方便这功能
    TangMonk
        6
    TangMonk  
    OP
       
    @kaichen 昨晚上太困,先睡了,今早看到你的回复受益匪浅。

    可不可以把消息队列理解为 middleware 呢
    julyclyde
        7
    julyclyde  
       2014-07-29 15:51:02 +08:00   1
    @TangMonk 消息队列就是middleware的一种。pubsub是多对多消息队列
    srdrm
        8
    srdrm  
       2014-07-29 17:26:17 +08:00   1
    本质上都是消息队列模式
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1177 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 17:41 PVG 01:41 LAX 09:41 JFK 12:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86