redis发布与订阅
2016-07-23 16:36
447 查看
redis在2.8.0版本之后出了一个新功能,叫Pub/Sub,也叫
在这篇文章中不仅要介绍它是如何用的,更重要的是要介绍它的应用场景。
在之前介绍websocket之用tubesock在rails实现聊天室(五)的时候,就用redis的pub/sub实现过聊天室。相关的代码是这样的:
说到这个发布与订阅,必须说到一个词叫
比如,我现在有一个客户端a,在订阅通道
我们来实现一下。
首先用
输入
现在再开启另一个
"发布与订阅"。
在这篇文章中不仅要介绍它是如何用的,更重要的是要介绍它的应用场景。
在之前介绍websocket之用tubesock在rails实现聊天室(五)的时候,就用redis的pub/sub实现过聊天室。相关的代码是这样的:
redis_thread = Thread.new do Redis.new.subscribe "chat" do |on| on.message do |channel, message| tubesock.send_data message end end end tubesock.onmessage do |m| Redis.new.publish "chat", m end
说到这个发布与订阅,必须说到一个词叫
"channel"(通道)。接收消息者在通道上订阅消息,而发布消息者在通道上发布消息,发布者和接收者就是这样来交互信息的。
比如,我现在有一个客户端a,在订阅通道
room,它就一直在等待,直到有消息到来,而我又开了另一个客户端b,它在通道
room上发布了一条消息
“hello",客户端a马上就可以收到消息
"hello"。而类似a这样的客户端有很多个。这种方式就是可以实现聊天室的。因为它像广播消息,有一个消息出来了,每个只要订阅通道的客户端就会收到。
我们来实现一下。
首先用
redis-cli进入redis的客户端命令交互界面。
输入
SUBSCRIBE room,表示订阅通道
"room"。
127.0.0.1:6379> SUBSCRIBE room Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "room" 3) (integer) 1
现在再开启另一个
redis-cli[/code]客户端。
在通道"room"
通道 上发送一条信息"hello"
。
> publish room hello
先前的客户端会收到这样的消息:
1) "message"
2) "room"
3) "hello"
这样就完成了整个订阅与发布的流程。
publish
那个客户端一直停在那,它没有退出,只要给它发送消息,它就可以接收消息。
当然,像publish
那个客户端可以开启多个,只要订阅"room"
这个通道的客户端都会收到相同的消息。
还需要注意的一个点就是当没有任何订阅的客户端时,进行publish
时,数据是不会被存储起来的。
也就是说,下次有人订阅的时候,是收不到消息的。
127.0.0.1:6379> publish room hello(integer) 0
redis的订阅与发布比较常见的应用就是聊天室,当然还有其他的,比如做一个推送系统。
手机等客户端可以用redis订阅一个通道,然而后台可以给通道发布消息,这样,所有的手机客户端都可以通过通道得到后台发布的消息。
这样子实现,又能利用redis的快速和高性能的特点,也避免了传统方式的轮循作法。
完结。
相关文章推荐
- linux 安装redis 以及 lump lamp 安装redis扩展
- redis mysql 主从配置
- linux & windows php操作redis
- spring data redis 配置
- windows和linux的redis的安装
- Linux下Lamp环境 和 Lnmp环境 PHP使用Redis安装教程
- Redis介绍以及安装(Linux与windows)
- Redis 事务
- Redis教程分享系列:1.Redis基础入门
- Redis教程分享系列
- maven + redis + 分布式锁
- redis配置文件redis.conf参数说明
- Redis实现自动输入完成
- python_redis之篇
- redis实现消息队列
- Python3之redis使用
- redis实现cache系统实践(二)
- redis实现cache系统原理(一)
- Python之Redis操作
- (2) java项目中用redis