redis发布订阅什么用


本文摘自PHP中文网,作者(*-*)浩,侵删。

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。 (推荐学习:Redis视频教程)

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。

redis-22.png

发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

1,引入Jedis

1

2

3

4

5

<dependency>

    <groupId>redis.clients</groupId>

    <artifactId>jedis</artifactId>

    <version>2.9.0</version>

</dependency>

2,具体实现代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

package com.hcmony.sword.redis;

  

import org.apache.commons.lang3.StringUtils;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPubSub;

  

/**

 * <h3>Shenjue.java基本描述</h3>

 * <p></p>

 *

 * @author hcmony

 * @since V1.0.0, 2019/05/06 20:07

 */

public class RedisMQ {

    private static final String TOPIC="TOPIC";

  

    private final JedisPool jedisPool;

  

    public RedisMQ(JedisPool jedisPool) {

        this.jedisPool = jedisPool;

    }

  

    /**

     * 发布消息

     * @param topic

     * @param messge

     */

    public void publish(String topic ,String messge){

  

        Jedis jedis = null;

        if (StringUtils.isBlank(topic)){

            topic=TOPIC;

        }

        try {

            jedis = jedisPool.getResource();

            jedis.publish(topic,messge);

        }

        finally {

            if (null != jedis) {

                jedis.close();

            }

        }

    }

  

    /**

     * 订阅消息

     * @param topic

     * @param jedisPubSub

     */

    public void subscribe(String topic,JedisPubSub jedisPubSub){

  

        Jedis jedis = null;

        if (StringUtils.isBlank(topic)){

            topic=TOPIC;

        }

        try {

            jedis = jedisPool.getResource();

            jedis.subscribe(jedisPubSub,topic);

        }

        finally {

            if (null != jedis) {

                jedis.close();

            }

        }

    }

  

  

    public static void main(String[] args) {

        //默认连接本地redis,

        // loclhost:6379

        JedisPool jedisPool = new JedisPool();

        RedisMQ publish = new RedisMQ(jedisPool);

        new Thread(new Runnable() {

            @Override

            public void run() {

                publish.subscribe("PID",new MyjedisPubSub());

            }

        }).start();

        for (int i=0;i<100;i++){

            publish.publish("PID","messge"+i);

        }

  

    }

  

    public static class MyjedisPubSub extends JedisPubSub {

        @Override

        public void onMessage(String channel, String message) {

            System.out.println("-------channel is "+channel+" message is "+message);

        }

    }

  

}

更多Redis相关技术文章,请访问Redis数据库使用入门教程栏目进行学习!

以上就是redis发布订阅什么用的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

Redis为什么要序列化

Redis怎么清除缓存数据

Redis如何设置密码

Redis与mysql有哪些区别

Redis使用要注意什么

Redis默认端口是什么

详解Redis哨兵模式

小记 Redis介绍与安装部署

Redis缓存雪崩、缓存击穿、缓存穿透是什么意思

Redis单线程为什么需要加锁

更多相关阅读请进入《Redis》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...