六.redis 发布订阅
?????? 发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个 channel,也可以向多个channel发送消息。
下面做个实验。这里使用两个不同的client一个是redis自带的redis-cli另一个是用java写的简单的client。代码如下
import java.net.*;import java.io.*;public class PubSubTest { public static void main(String[] args) { String cmd = args[0]+"\r\n"; try { Socket socket = new Socket("192.168.56.55",6379); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); out.write(cmd.getBytes()); //发送订阅命令 byte[] buffer = new byte[1024]; while (true) { int readCount = in.read(buffer); System.out.write(buffer, 0, readCount); System.out.println("--------------------------------------"); } } catch (Exception e) { } }}代码就是简单的从命令行读取传过来的订阅命令,然后通过一个socket连接发送给redis server,然后进入while循环一直读取redis server传过来订阅的消息。并打印到控制台
D:\>javac PubSubTest.javaD:\>java PubSubTest "subscribe news.share news.blog"*3$9subscribe$10news.share:1*3$9subscribe$9news.blog:2--------------------------------------
redis> psubscribe news.*Reading messages... (press Ctrl-c to quit)1. "psubscribe"2. "news.*"3. (integer) 13 再启动一个redis-cli用来发布两条消息
redis> publish news.share "share a link http://www.google.com"(integer) 2redis> publish news.blog "I post a blog"(integer) 24.查看两个订阅client的输出
*3$7message$10news.share$34share a link http://www.google.com--------------------------------------*3$7message$9news.blog$13I post a blog--------------------------------------
1. "pmessage"2. "news.*"3. "news.share"4. "share a link http://www.google.com"1. "pmessage"2. "news.*"3. "news.blog"4. "I post a blog"分析下
from:http://www.cnblogs.com/xhan/archive/2011/02/06/1949473.html