Redis从入门到精通4:Redis中的消息机制

2020-04-04  本文已影响0人  金字塔下的小蜗牛

本节来介绍Redis中的消息机制。

1.消息的类型

Queue,队列:点对点。只能一对一发送和接收。

Topic,主题:广播。发给所有人,所有人都能收到。

2.常见的消息系统

Redis支持的消息发布系统,即Topic广播,不支持Queue。只支持字符串消息,不支持对象消息。

Apache Kakfa也是Topic消息类型的消息发布系统。主要用于实时计算系统中,作为缓存使用。例如在Storm的实时计算中使用Kakfa作为缓存。支持字符串消息,也支持对象消息。

JMS,即Java Messaging Service:Java消息服务,即支持Queue类型的消息,也支持Topic类型的消息。常见的JMS Server有:Apache JMS Server、Weblogic等等。支持字符串消息,也支持对象消息。传输对象消息时,该对象需要实现序列化,以在网络上传输。

这些消息系统都是异步通信机制。

3.Redis消息机制的体系结构

image

4.发布消息和订阅消息

5.命令行下演示消息机制

示例1:一个发布者可以发给多个订阅者。
发布者:

127.0.0.1:6379> publish mychannel1 hellworld
(integer) 2

注意:这里返回的2表示该消息已经被2个订阅者成功接收。

订阅者1:

127.0.0.1:6379> subcribe mychannel1
Reading messages... (press Ctrl-C to quit)

  1. "subcribe"
  2. "mychannel1"
  3. (integer) 1
  4. "message"
  5. "mychannel1"
  6. "helloworld"

订阅者2:

127.0.0.1:6379> subcribe mychannel1

  1. "subcribe"
  2. "mychannel1"
  3. (integer) 1
  4. "message"
  5. "mychannel1"
  6. "helloworld"

示例2:一个订阅者可以订阅多个发布者。
发布者1:

127.0.0.1:6379> publish mychannel1 hellworld
(integer) 1

发布者2:

127.0.0.1:6379> publish mychannel2 hellpredis
(integer) 1

订阅者:

127.0.0.1:6379> psubcribe mychannel*

  1. "psubcribe"
  2. "mychannel*"
  3. (integer) 1
  4. "pmessage"
  5. "mychannel*"
  6. "mychannel1"
  7. "helloworld"
  8. "pmessage"
  9. "mychannel*"
  10. "mychannel2"
  11. "helloredis"

6.Java API演示消息机制

//示例:使用Java API来接收channel1发送的消息
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
import redis.clients.jedis.Transaction;
public class TestRedis {
    @Test
    public void testMessage(){
    //创建一个Redis客户端
    Jedis client = new Jedis("192.168.126.110",6379);
    //订阅频道channel1的消息
    client.subcribe(new MyMessageConsumer(),"mychannel1");
}
//创建一个消息的接收者来接收消息
class MyMessageConsumer extends JedisPubSub{
    @Override 
    public void onMessage(String channel, String message){
        System.out.println("频道:"+channel+"\t消息是:"+message);
    }
}

运行程序就能接收到channel1发布的消息。

总结:虽然Redis支持消息机制,但是它的消息机制功能太过于简单,远远比不上其他消息系统,比如Kafka等。因此,Redis最主要的用途还是作为缓存数据库使用。

上一篇 下一篇

猜你喜欢

热点阅读