`
awaitdeng
  • 浏览: 216574 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

redis发布与订阅实例

阅读更多
package com.redis.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


public class JedisPubSubTest {

 public static JedisPool pool;
 static {
  JedisPoolConfig jedispool_config = new JedisPoolConfig();
  jedispool_config.maxActive = 20;
  jedispool_config.maxIdle = 0;
  jedispool_config.maxWait = 1000;
  jedispool_config.testOnBorrow = true;

  pool = new JedisPool(jedispool_config, "127.0.0.1", 6379);
 }

 public static void main(String[] args) throws InterruptedException {
  Jedis redisClient1 = pool.getResource();
  Jedis redisClient2 = pool.getResource();
  MyListener listener = new MyListener();

  Publisher pub = new Publisher();
  pub.publish(redisClient2); //发布一个频道

 

  Subscriber sub = new Subscriber();
  sub.psub(redisClient1, listener); // 订阅一个频道

  
 }

}

 

 

 

 


class Subscriber {
 
 public void psub(final Jedis redisClient, final MyListener listener) {
  

  new Thread(new Runnable() {
   @Override
   public void run() {

    System.out.println("订阅:news.share");
    // 订阅得到信息在lister的onMessage(...)方法中进行处理

    // 订阅多个频道
    // redisClient.subscribe(listener, "news.share", "news.log");

    //redisClient.subscribe(listener, new String[]{"news.share","news.log"});
      redisClient.psubscribe(listener, new String[] { "news.share" });// 使用模式匹配的方式设置频道
   }
  }).start();

 }

}

 

 


class Publisher {
 
 public void publish(final Jedis redisClient) {
  
  new Thread(new Runnable() {
   @Override
   public void run() {
    try {
     Thread.currentThread().sleep(2000);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    System.out.println("发布:news.share");
    redisClient.publish("news.share", "ok");
    redisClient.publish("news.share", "hello word");
   }
  }).start();

 }

}

 

 

消息监听:

 

package com.redis.test;

import redis.clients.jedis.JedisPubSub;

public class MyListener extends JedisPubSub {
 // 取得订阅的消息后的处理
 public void onMessage(String channel, String message) {
  System.out.println(channel + "=" + message);
 }

 // 初始化订阅时候的处理
 public void onSubscribe(String channel, int subscribedChannels) {
   System.out.println(channel + "=" + subscribedChannels+"&&&&&&&");
 }

 // 取消订阅时候的处理
 public void onUnsubscribe(String channel, int subscribedChannels) {
   System.out.println(channel + "=" + subscribedChannels+"#########");
 }

 // 初始化按表达式的方式订阅时候的处理
 public void onPSubscribe(String pattern, int subscribedChannels) {
   System.out.println(pattern + "=" + subscribedChannels+"!!!!!!!");
 }

 // 取消按表达式的方式订阅时候的处理
 public void onPUnsubscribe(String pattern, int subscribedChannels) {
   System.out.println(pattern + "=" + subscribedChannels+"@@@@@@@@@");
 }

 // 取得按表达式的方式订阅的消息后的处理
 public void onPMessage(String pattern, String channel, String message) {
  System.out.println(pattern + "=" + channel + "=" + message);
 }
}


结论: 经测试 sub 必须发pub 之前,否则收不到 message, 不要 pool.returnResource操作,会报异常。
分享到:
评论

相关推荐

    C# Redis发布订阅Demo

    接着,我们可以通过`GetSubscriber`方法获取到`ISubscriber`实例,用于订阅和发布消息: ```csharp var subscriber = redis.GetSubscriber(); ``` 对于发布者(Publisher)来说,使用`Publish`方法可以向指定频道...

    redis发布订阅小案例

    在Java代码中,我们创建`Jedis`实例连接到Redis服务器,然后可以使用`publish`方法发布消息,`subscribe`方法订阅频道。以下是一个简单的示例: ```java import redis.clients.jedis.Jedis; import redis.clients....

    Java实现Redis的消息订阅和发布

    本篇文章将深入探讨如何使用Java来实现Redis的消息订阅和发布功能,这在分布式系统和实时数据处理中非常关键。 首先,理解Redis的发布/订阅(Pub/Sub)模式是至关重要的。在这一模式下,Redis服务器作为消息的中间...

    redis订阅与发布.zip

    在 Redis 中,订阅与发布(Pub/Sub)是一种消息通信模式,用于实现实时的消息传递。在这个模式下,发布者将消息发送到特定的频道,而订阅者则可以监听并接收这些频道上的消息。这种机制无需直接交互,而是通过中间的...

    Redis发布订阅.net实现

    在.NET环境中,我们可以利用StackExchange.Redis库来实现对Redis的各种操作,包括发布订阅(Publish/Subscribe)功能。发布订阅是一种通信模式,允许消息发送者(Publisher)向多个消息接收者(Subscriber)广播消息...

    QT实现redis订阅发布功能

    通过以上步骤,你将能够利用Qt和hiredis实现完整的Redis订阅发布功能。这将使你的应用程序能够与其他使用相同Redis频道的客户端进行实时通信,极大地扩展了Qt应用的可能性。记得在实际项目中进行充分的测试和优化,...

    .net core如何使用Redis发布订阅

    使用StackExchange.Redis进行发布订阅,首先需要建立与Redis服务器的连接。可以通过`ConnectionMultiplexer`类创建连接,并通过其`Connect`方法获取连接实例: ```csharp using (var redis = ConnectionMultiplexer....

    Redis在Delphi7下使用,支持发布、订阅等

    在Delphi7这个经典的面向对象编程环境中,可以利用第三方库或者自定义组件来实现Redis的客户端连接,以实现发布/订阅等功能。 在这个项目中,我们可以看到几个关键文件: 1. RedisClient.cfg 和 NsyRedis.cfg:...

    redis安装与开发实例

    本教程将详细讲解Redis的安装过程和Java开发中的实际应用实例。 一、Redis安装 1. 下载Redis:首先,你需要从官方网站(https://redis.io/download)获取Redis的最新稳定版本。根据你的操作系统(如Windows、Linux...

    labview redis通讯源码及实例

    8. **消息队列实现**:通过Redis的发布/订阅功能,LabVIEW可以实现异步通信,比如在不同模块之间传递消息。 9. **LabVIEW与外部系统集成**:这个实例可能是展示如何将LabVIEW系统与其他依赖Redis的系统(如Web服务...

    java redis 各类型操作实例

    Redis还提供了消息发布/订阅功能,允许不同客户端间通信: ```java // 发布者 jedis.publish("channel", "message"); // 订阅者 JedisPubSub subscriber = new JedisPubSub() { @Override public void ...

    Java实现Redis的消息订阅和发布源码

    这个例子展示了如何使用Java通过Jedis与Redis进行交互,实现实时的消息发布和订阅。在实际应用中,你可以根据需求对代码进行扩展,例如支持多通道订阅,处理更复杂的消息格式,或者使用连接池管理Jedis实例以提高...

    Redis中使用Java代码的方式实现发布订阅流程-发布者示例代码.zip

    在Redis中,发布/订阅(Publish/Subscribe,简称Pub/Sub)是一种消息通信模式,它允许消息生产者(发布者)发送消息到一个频道,而多个消息消费者(订阅者)可以实时接收这些消息。这个功能在分布式系统中尤其有用,...

    Redis发布者和订阅者.rar

    1. **Redis消息订阅与发布** Redis的发布/订阅(Pub/Sub)模式是一种轻量级的消息通信机制。发布者将消息发送到一个频道,订阅者可以监听并接收这些频道上的消息。这种模式不保证消息的可靠传递,适合对实时性要求...

    Redis中使用Java代码的方式实现发布订阅流程-订阅者示例代码.zip

    以下是一些关于Redis订阅者的关键知识点: 1. **Jedis库**: Java开发者通常使用Jedis这个开源库来与Redis服务器交互。Jedis提供了丰富的API,包括发布和订阅功能。 2. **订阅者接口**: 在Jedis中,`JedisPubSub`是...

    C#中使用redis简单实例

    Redis还支持发布和订阅功能,可以创建频道并发送消息: ```csharp var pubSub = redis.GetSubscriber(); pubSub.Publish("channelName", "message"); ``` 并通过`Subscribe`方法接收消息: ```csharp pubSub...

    springboot+dubbo+redis+RabbitMQ 项目实例

    在本项目中,Redis可能被用来存储热点数据,提高读取速度,或者作为消息队列的辅助工具,如发布/订阅模式,提高系统的实时性。 5. **RabbitMQ**: RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)的消息...

    Spring boot+redis实现消息发布与订阅的代码

    在本文中,我们将深入探讨如何使用Spring Boot和Redis来实现消息发布与订阅功能。Spring Boot以其简化Spring应用程序的初始化和配置而闻名,而Redis则是一个高效、轻量级的内存数据结构存储,常用于实现缓存、消息...

    Redis+Spring实例

    8. **扩展功能**:Redis不仅支持基础数据类型,还提供了发布/订阅、事务、lua脚本等功能,可以根据实际需求灵活使用。 通过这个实例,开发者可以深入理解如何在Spring应用中集成Redis,并掌握相关配置和操作,提升...

    Redis使用实例

    - **发布订阅(Pub/Sub)**:实现消息传递,客户端可以订阅特定频道,服务器向频道发布消息时,订阅者将收到通知。 - **分布式锁**:使用`SETNX`或`SETEX`配合超时机制,实现跨节点的锁服务,常用于并发控制。 4....

Global site tag (gtag.js) - Google Analytics