精华内容
下载资源
问答
  • redis 订阅发布

    千次阅读 2019-11-26 13:17:16
    redis 订阅发布 subscribe 订阅者 publish 发布者 1.我们启用四个进程,三个为订阅者(subscribe),一个为发布者(publish) 订阅者加入demo 发布者发布消息 这是在看三个订阅者的信息。 这时候demo1112223334...

    redis 订阅发布

    subscribe 订阅者
    publish 发布者
    在这里插入图片描述
    1.我们启用四个进程,三个为订阅者(subscribe),一个为发布者(publish)
    订阅者加入demo
    在这里插入图片描述
    发布者发布消息
    在这里插入图片描述
    这是在看三个订阅者的信息。
    在这里插入图片描述
    这时候demo1112223334已经显示了

    展开全文
  • Redis订阅发布

    2020-05-31 11:11:00
    Redis发布订阅 (pub/sub) 是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。(微信、微博、关注系统) Redis客户端可以订阅任意数量的频道。 订阅/发布消息图: 第一个:消息发送者; 第二个:频道...

    发布订阅

    Redis发布订阅 (pub/sub) 是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。(微信、微博、关注系统)
    Redis客户端可以订阅任意数量的频道。

    订阅/发布消息图:

    第一个:消息发送者;  第二个:频道;  第三个:消息订阅者

    下图展示了 频道channel1,以及订阅这个频道的三个客户端——client2client5client1 之间的关系:

    当有新消息通过 PUBLISH命令 发送给 频道channel1 时,这个消息就会被发送给订阅它的三个客户端:

    命令

    序号命令及描述
    1PSUBSCRIBE pattern [pattern ...] 
    订阅一个或多个符合给定模式的频道。
    2PUBSUB subcommand [argument [argument ...]] 
    查看订阅与发布系统状态。
    3PUBLISH channel message 
    将信息发送到指定的频道。
    4PUNSUBSCRIBE [pattern [pattern ...]] 
    退订所有给定模式的频道。
    5SUBSCRIBE channel [channel ...] 
    订阅给定的一个或多个频道的信息。
    6UNSUBSCRIBE [channel [channel ...]] 
    指退订给定的频道。

    测试使用

    SUBSCRIBE xyq
    PUBLISH xyq lalala
    

    ①:订阅一个频道:xyq

    ②:发布者发布消息到频道

    原理

    Redis是使用C实现的,通过分析Redis源码里的 pubsub.c 文件,了解发布和订阅机制的底层实现。

    Redis通过 PUBLISH、SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能。

    通过 SUBSCRIBE 命令订阅某频道后,redis-server里维护了一个字典,字典的键就是一个个 channel,而字典的值则是一个链
    表,链表中保存了所有订阅这个 channel 的客户端。SUBSCRIBE 命令的关键,就是将客户端添加到给定 channel 的订阅链表中。

    通过 PUBLISH命令向订阅者发送消息,redis-server会使用给定的频道作为键,在它所维护的channel字典中查找记录了订阅这
    个频道的所有客户端的链表,遍历这个链表,将消息发布给所有订阅者。

    Pub/Sub从字面上理解就是发布( Publish )与订阅( Subscribe ),在Redis中,你可以设定对某一个key值进行消息发布及消息订
    阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系
    统。比如普通的即时聊天,群聊等功能。
     

    展开全文
  • redis 订阅 发布

    2017-05-04 23:00:22
    跟kafka类似 订阅:subscribe 发布:publish redis-cli 在命令行里输信息

    跟kafka类似

    订阅:subscribe

    发布:publish

    redis-cli 在命令行里输信息

    展开全文
  • 下面小编就为大家带来一篇Redis 订阅发布_Jedis实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • redis订阅发布模式: Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。  发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息...

    redis订阅发布模式:

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

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

    实现功能:

    通过网页访问一个网址的时候实现redis在某个频道的的发布,同时订阅了该频道的redis订阅者会做出相应的反应。

    要想让redis在web容器开启时就一直处于订阅状态,考虑通过listener来实现:

    Listener:

    @Configuration
    @WebListener
    public class MyListenerOnServlet implements ServletContextListener{
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            System.out.println("ServletContext容器初始化了。。。");
            Thread threadOnRedis = new TestSubscribe();
            threadOnRedis.start();
    
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
            System.out.println("ServletContext容器销毁了。。。");
        }
    
    }
    TestSubScribe线程类:

    public class TestSubscribe extends Thread {
    
    
        @Override
        public void run() {
            JedisShardInfo jedisShardInfo = new JedisShardInfo("127.0.0.1", 6379);
            jedisShardInfo.setPassword("admin");
            Jedis jedis = new Jedis(jedisShardInfo);
            RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
            jedis.subscribe(listener, "redisChatTest");
            System.out.println("不阻塞");
        }
    }

    RedisMsgPubSubListener类:

    public class RedisMsgPubSubListener extends JedisPubSub {
        @Override
        public void unsubscribe() {
            super.unsubscribe();
        }
    
        @Override
        public void unsubscribe(String... channels) {
            super.unsubscribe(channels);
        }
    
        @Override
        public void subscribe(String... channels) {
            super.subscribe(channels);
        }
    
        @Override
        public void psubscribe(String... patterns) {
            super.psubscribe(patterns);
        }
    
        @Override
        public void punsubscribe() {
            super.punsubscribe();
        }
    
        @Override
        public void punsubscribe(String... patterns) {
            super.punsubscribe(patterns);
        }
    
        @Override
        public void onMessage(String channel, String message) {
            System.out.println("channel:" + channel + "receives message :" + message);
    //        this.unsubscribe();
        }
    
        @Override
        public void onPMessage(String pattern, String channel, String message) {
    
        }
    
        @Override
        public void onSubscribe(String channel, int subscribedChannels) {
            System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);
        }
    
        @Override
        public void onPUnsubscribe(String pattern, int subscribedChannels) {
    
        }
    
        @Override
        public void onPSubscribe(String pattern, int subscribedChannels) {
    
        }
    
        @Override
        public void onUnsubscribe(String channel, int subscribedChannels) {
            System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);
        }
    
    
    }


    通过controller的访问来触发redis的发布:

    Controller:

    @RequestMapping("/t07")
        public String test07(@RequestParam("msg") String s){
            testService.testRedisForMsg(s);
            return "完成";
        }
    Service:

    @Service
    public class TestService {
    
        @Autowired
        private JedisPool jedisPool;
    
        @Autowired
        private UserMapper userMapper;
    
        
    
        public void testRedisForMsg(String msg){
            Jedis jedis = jedisPool.getResource();
            try{
                jedis.publish("redisChatTest", msg);
            }catch (Exception e){
                System.out.println("发布出错:"+e.toString());
            }finally {
                if(jedis!=null){
                    jedis.close();
                }
            }
        }
    
    
    
    }
    jedispool配置就不解释了。差不多就是这样,在浏览器访问触发redis发布的时候,本例的响应是在控制台输出发布信息。

    输出信息:

    channel:redisChatTestreceives message :lvelvelve
    相应可以自己决定,感觉又学到了好玩的东西。





    展开全文
  • php 实现redis 订阅发布

    千次阅读 2019-02-18 22:08:47
    php 实现redis 订阅发布 一、概念 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,Redis 客户端可以订阅任意数量的频道。 下图展示了频道 channel1 , 以及订阅这个频道...
  • Redis 订阅发布 - Jedis实现

    千次阅读 2018-05-30 16:36:53
    Redis 订阅发布 - Jedis实现我想到使用Redis订阅发布模式是用来解决推送问题的~。对于概念性的叙述,多多少少还是要提一下的:​ 什么是Redis发布订阅?Redis发布订阅是一种消息通信模式,发送者通过通道A发送...
  • 文章目录前言一、Redis订阅发布是什么?二、使用步骤1.安装Redis2.使用总结 前言 前段时间有一个需求是这样的,公司有一个视频资源网站,同时拥有一个需要该视频资源的客户端,用户通过网站购买加密视频资源,在...
  • redis订阅发布演示

    2020-08-07 15:31:17
    redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 redis发布订阅命令 redis客户端可以订阅任意数量的频道。 发布订阅模型 下图展示了频道channel1,以及订阅这个频道...
  • redis订阅发布模式

    2016-06-13 10:48:18
    redis发布订阅模式
  • java实现redis订阅发布

    2019-07-13 15:25:00
    一:什么是订阅发布: 什么是redis的发布订阅(pub/sub)? Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能。基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供...
  • Redis订阅发布消息 首先,发布端启动 redis-server.exe 服务 发布端 pub.py #!/usr/bin/env python # -*- coding: utf-8 -*- ''' Created on 2015-9-9 @author: sxli ''' import redis import sys class ...
  • Redis 发布订阅 Redis 发布订阅可以用在像消息通知,群聊,定向推送,参数刷新加载等业务场景 发布订阅模型有三个角色: 发布者(Publisher) 订阅者(Subscriber) 频道(channel) 每个订阅者可以订阅多个频道,...
  • 1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息。类似于设计模式中的观察者模式。发布者和订阅者之间使用频道进行通信,当需要发送消息时,发布者...
  • redis订阅发布示例

    2016-06-05 21:55:29
    下面的代码使用redis实现订阅/发布。需要jedis的2.0.0和SLF4J的jar包。 在redis中可以同时订阅多个频道,如果有消息发布redis会发出通知。jedis中提供了JedisPubSub抽象类来提供发布/订阅的机制,在实际应用中...
  • c#Redis订阅发布

    千次阅读 2020-02-27 13:33:48
    三个文件RedisHelper.cs、DevConst....using StackExchange.Redis; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Run...
  • redis是一个key-value存储系统。...也能实现订阅发布系统,我们来看看怎样用redis和python结合起来进行订阅发布的, import redis class RedisSubscri(): def __init__(self,host): self.coon=redis.Redi
  • Redis 订阅发布 原理

    2016-08-11 20:44:01
    参考内容RedisServer包含两个重要的结构: 1. channels:实际上就是一个key-value的Map结构,key为订阅地频道,value为Client的List 2. patterns:存放模式+client地址的列表流程:从pubsub_channels中找出跟publish...
  • redis订阅发布机制实现分布式锁

    千次阅读 2018-03-26 12:57:46
    通常情况在解决分布式场景锁机制都会首先想到redis。因为redis单线程天然就解决了这个问题。使用redis实现分布式锁可以通过getset和setnx。 getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value) ...
  • 一.准备 二.代码 三.成果 四.声明 ...一....1.1 - 自行下载jedis jar包....redis.clients</groupId> <artifactId>jedis</artifactId> <versi...
  • //收到消息后执行回调,message是redis发布的消息 rclient.on('message', function(channel, price){ console.log("我在频道【"+channel+"】接收到了消息:"+price); console.log(socketUsers); console.log("in...
  • * 配置redis扩展 https://blog.csdn.net/fareast_mzh/article/details/81463749 用php -S 0.0.0.0:8090 -t public 这种web服务, redis连接失败。我用的xampp, extra/httpd-vhost.conf配置 * composer安装redis...
  • 我在用jedis时还发现一个问题,我订阅是一个线程在跑的,但时间长的了后,不操作时,再发布一条信息时,订阅就无法订阅到了,后台报错,依然是无法将jedis连接还回到pool中,不知道是什么问题,所以想还是用spring-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,123
精华内容 18,449
关键字:

redis订阅发布

redis 订阅