RedisPubSub - downgoon/hello-world GitHub Wiki
验证Redis Pub/Sub是一个完全“即发即失”的Pub/Sub,它具备的特点:
服务器端不做任何存储:一个消息到达后,立马转发给它的Sub。它的Sub必须在线,不在线的收不到消息,而且转发完成后服务器才会给Publisher方返回。
Redis的Pub/Sub实现非常简单,服务器只维护一个订阅关系数据结构,该结构就是一个字典:channel -> SubscribeRedisClient LIST
- 启动
redis-server
- 启动
redis-cli
,运行3个实例作为Subscriber,分别执行命令:subscribe newuser
;subscribe newuser
和subscribe deluser
- 启动
redis-cli
,运行1个实例,作为Publisher,执行命令:publish newuser liwei
;publish newuser wangwei
;publish deluser wangyi
;publish notopic value
- 启动redis-cli,运行1个实例,作为管理台,执行命令:
pubsub channels
和pubsub numsub newuser deluser
。
$ wget http://download.redis.io/releases/redis-3.0.5.tar.gz
$ tar xzf redis-3.0.5.tar.gz
$ cd redis-3.0.5
$ make
- 启动服务器
➜ src ./redis-server
- 启动3个客户端
第1个客户端:
➜ src ./redis-cli
127.0.0.1:6379> subscribe newuser
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "newuser"
3) (integer) 1
1) "message"
2) "newuser"
3) "liwei"
第2个客户端:
127.0.0.1:6379> subscribe newuser
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "newuser"
3) (integer) 1
1) "message"
2) "newuser"
3) "liwei"
第3个客户端:
127.0.0.1:6379> subscribe deluser
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "deluser"
3) (integer) 1
- 管理统计
127.0.0.1:6379> PUBSUB NUMSUB newuser
1) "newuser"
2) (integer) 2
127.0.0.1:6379> PUBSUB NUMSUB deluser
1) "deluser"
2) (integer) 1
127.0.0.1:6379> PUBSUB CHANNELS
1) "deluser"
2) "newuser"
127.0.0.1:6379> PUBSUB CHANNELS
1) "newuser"
消息分三个历史阶段:
- Direct: Pub -> Sub
- Topic: Pub -> Topic -> Sub
- Routing: Pub -> Exchange <-Routing-> Queue -> Sub
Redis
实现时,支持模式2和变种3,它术语上叫Channel
和Pattern
。其中Channel
就是一个字符串,而Pattern
可以支持通配符。
Redis有六个命令:
- Subscribe channel [channel …] 订阅通道
- Unsubscribe channel [channel …] 取消订阅通道
- Psubscribe pattern [pattern …] 模式订阅
- Punsubscribe pattern [pattern …] 模式取消订阅
- Publish channel message 向通道发送消息,每次只能Pub到一个Channel,但一个Channel可以被多个订阅。
- Pubsub subcommand [argument [argument …]] Pub/Sub管理功能