redis发布并订阅

  • 订阅命令  SUBSCRIBE c1 c2                      c1 和 c2是通道名称
  • 发布消息   publish c1 'i am is long!!!'

                            publish c2 'i am is long!!!'

 

  • 订阅的客户端就会收到两条不同通道发出来的消息

 

  • 当redis服务器重启之后  订阅的数据没有通知到的会丢失
  • 当redis服务器再次启动后,可以继续监听和发送消息
  • 可以订阅和发布 模糊样式的通道 

模式匹配订阅

Redis 的Pub/Sub实现支持模式匹配。客户端可以订阅全风格的模式以便接收所有来自能匹配到给定模式的频道的消息。

比如:

PSUBSCRIBE news.*

将接收所有发到news.art.figurative, news.music.jazz等等的消息,所有模式都是有效的,所以支持多通配符。

PUNSUBSCRIBE news.*

 

springboot  redis实现订阅 通知功能

  1. pow文件依赖 
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    

     

  2. application.properties 增加
    #redis
    spring.redis.host=localhost
    spring.redis.port=6379
    #spring.redis.password=
    spring.redis.database=1
    spring.redis.pool.max-active=8
    spring.redis.pool.max-wait=-1
    spring.redis.pool.max-idle=500
    spring.redis.pool.min-idle=0
    spring.redis.timeout=0
    

     

  3. redis配置

    @Bean //相当于xml中的bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                                MessageListenerAdapter listenerAdapter) {
    
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            //订阅了一个叫chat 的通道
            container.addMessageListener(listenerAdapter, new PatternTopic("chat"));
            //这个container 可以添加多个 messageListener
            return container;
        }
    
        /**
         * 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法
         * @param receiver
         * @return
         */
        @Bean
        MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
            //这个地方 是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage”
            //也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看
            return new MessageListenerAdapter(receiver, "receiveMessage");
        }
    
        /**redis 读取内容的template */
        @Bean
        StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
            return new StringRedisTemplate(connectionFactory);
        }

     

  4. 发送消息

        public void sendMessage(){
            stringRedisTemplate.convertAndSend("chat",String.valueOf(Math.random()));
        }

     

  5. 接收消息

        /**接收消息的方法*/
        public void receiveMessage(String message){
            System.err.println("收到一条消息:"+message);
        }

     

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值