一.命令简介

1.PSUBSCRIBE 订阅一个或多个符合给定模式的频道。
2.PUBLISH 将信息 message 发送到指定的频道 channel 。
3.PUBSUB 是一个查看订阅与发布系统状态的内省命令, 它由数个不同格式的子命令组成
4.PUNSUBSCRIBE 指示客户端退订所有给定模式。
5.SUBSCRIBE 订阅给定的一个或多个频道的信息。
6.UNSUBSCRIBE 指示客户端退订给定的频道。

二.例子

1.订阅msg

2.发送信息

三.代码实现

using Newtonsoft.Json;
using StackExchange.Redis;
using System;namespace ResdisPubSub.PubSub
{/// <summary>/// 通过redis实现的订阅-发布机制/// </summary>public class RedisSubscribe : ISubscribeService{//链接static ConnectionMultiplexer redis;static RedisSubscribe(){ConfigurationOptions config = new ConfigurationOptions(){AbortOnConnectFail = false,ConnectRetry = 10,ConnectTimeout = 5000,ResolveDns = true,SyncTimeout = 5000,EndPoints = { { "127.0.0.1:6379" } },Password = "111111",AllowAdmin = true,KeepAlive = 180};redis = ConnectionMultiplexer.Connect(config);}/// <summary>/// 发布消息/// </summary>/// <typeparam name="T">消息类型</typeparam>/// <param name="channel">频道:消息的名称</param>/// <param name="msg">消息内容</param>/// <returns></returns>public void Publish<T>(string channel, T msg){try{if (redis != null && redis.IsConnected){redis.GetSubscriber().Publish(channel, JsonConvert.SerializeObject(msg));}}catch (InvalidOperationException ex){Console.WriteLine("redis服务错误,详细信息:" + ex.Message + ",来源:" + ex.Source);}}/// <summary>/// 订阅消息/// </summary>/// <param name="subChannel">频道:消息的名称</param>/// <param name="action">收到消息后的处理</param>public void Subscribe(string subChannel, Action<string> action){try{if (redis != null && redis.IsConnected){redis.GetSubscriber().Subscribe(subChannel, (channel, message) => { action(message); });}}catch (InvalidOperationException ex){Console.WriteLine("redis服务错误,详细信息:" + ex.Message + ",来源:" + ex.Source);}}/// <summary>/// 取消订阅/// </summary>/// <param name="channel">频道:消息的名称</param>public void Unsubscribe(string channel){try{if (redis != null && redis.IsConnected){redis.GetSubscriber().Unsubscribe(channel);}}catch (InvalidOperationException ex){Console.WriteLine("redis服务错误,详细信息:" + ex.Message + ",来源:" + ex.Source);}}/// <summary>/// 取消全部订阅/// </summary>public void UnsubscribeAll(){try{if (redis != null && redis.IsConnected){redis.GetSubscriber().UnsubscribeAll();}}catch (InvalidOperationException ex){Console.WriteLine("redis服务错误,详细信息:" + ex.Message + ",来源:" + ex.Source);}}}
}

    class Program{static ISubscribeService client = new RedisSubscribe();static void Main(string[] args){client.Subscribe("bigbigChannel", m => { Console.WriteLine($"我是bigbigChannel,接收到信息:{m}"); });Thread t = new Thread(Run);t.Start();}static void Run(){for (int i = 0; i < 100; i++){Thread.Sleep(1000);client.Publish("bigbigChannel", i.ToString());}}}

源码下载:https://github.com/lgxlsm/ResdisPubSub

转载于:https://www.cnblogs.com/lgxlsm/p/7562944.html

Redis 发布/订阅模式相关推荐

  1. Spring Boot 使用Redis发布订阅模式处理消息

    Spring Boot 使用Redis发布订阅模式 1. Redis发布订阅模式 2. Spring Boot中订阅消息 2.1 Redis监听器容器配置 2.2 创建通道监听器 2.3 测试订阅功能 ...

  2. Redis发布订阅模式

    使用银行卡消费的时候,银行往往会通过微信.短信或邮件通知用户这笔交易的信息,这便是一种发布订阅模式,这里的发布是交易信息的发布,订阅则是各个渠道.这在实际工作中十分常用,Redis 支持这样的一个模式 ...

  3. redis发布/订阅模式

    其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子 就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个 场 ...

  4. redis发布订阅模式详解

    文章目录 写在前面 发布订阅的使用 SUBSCRIBE命令 PUBLISH命令 注意发布.订阅客户端启动顺序! PUBSUB命令 PUNSUBSCRIBE命令 UNSUBSCRIBE命令 PSUBSC ...

  5. Redis发布订阅模式实现原理

    前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,很多时候我们可能不 ...

  6. redis集群的发布订阅模式

    项目开发过程中,遇到需要发消息的情况,是不是脑海里不自主的浮现kafka.rabbitmq等常用的消息队列?但如果消息非常简单,并且用量也不大,消息队列就会有点大材小用了吧,忽然想起了redis 也有 ...

  7. SpringBoot整合redis实现发布订阅模式

    Redis的发布订阅模式 发布订阅(Pub/Sub):目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接 ...

  8. Redis的发布订阅模式

    本文源码参看:https://github.com/duktig666/learn-example/tree/5586febea31c2fb368e19fbdba11ed08afd463e0/Redi ...

  9. java 阅发布模式_redis发布订阅模式

    一 前言 虽然有消息队列,我们还是要了解一下redis发布订阅模式哟!!!!! 二发布订阅模式 PUBLISH 命令向通道发送信息,此客户端称为publisher 发布者: SUBSCRIBE 向命令 ...

  10. Redis 发布订阅,小功能大用处,真没那么废材!

    假设我们有这么一个业务场景,在网站下单支付以后,需要通知库存服务进行发货处理. 上面业务实现不难,我们只要让库存服务提供给相关的给口,下单支付之后只要调用库存服务即可. 后面如果又有新的业务,比如说积 ...

最新文章

  1. 认认真真推荐几个机器学习、深度学习公众号
  2. vs2008创建mysql数据库_求教VS2008 C++连接MySQL数据库
  3. PHP 4 中对象的比较
  4. BZOJ-1798 维护序列
  5. android开发 停止运行程序,开发的时候老是报错 XXXXX程序已停止运行。
  6. 从零开始学Pytorch(零)之安装Pytorch
  7. 一个JS多个数组取交集算法
  8. 老大,我想获取MySQL插入数据的自增ID,该怎么弄?
  9. 小米笔记本 镜像_入手几个月小米笔记本Air13.3 i56200附几个镜像下载
  10. 规划资源管理常用表格
  11. asp毕业设计——基于asp+access的学生论坛设计与实现(毕业论文+程序源码)——学生论坛
  12. qt导出word模板(模块化程序,直接调用保存数据到指定路径)
  13. Centos7.4-docker安装部署实战
  14. 任正非:华为没有 996,更没有 007!
  15. 独木舟上的旅行(船问题贪心)
  16. 如何修改cef源码支持windows xp
  17. AD7797芯片驱动调试
  18. MATLAB数学建模必备算法--层次分析法AHP
  19. Linux磁盘空间被占用的释放方法
  20. SAP BOM展开函数CS_BOM_EXPL_MAT_V2

热门文章

  1. KVM详解(二)——KVM安装部署
  2. LVS详解(二)——LVS工作模式
  3. Linux手动配置虚拟机网络的两种方式
  4. Selenium3笔记-WebDriver源码初探
  5. (转)kafka 详解
  6. 单页面路由工程使用微信分享及二次分享解决方案
  7. DRDS 柔性事务漫谈
  8. Day02 目录和文件的管理(ADMIN02)
  9. 《电路分析导论(原书第12版)》一3.14 压控电阻
  10. ZZULIOJ 1917: E