Redis支持这样一种特性,你可以将数据推到某个信息管道中,然后其它客户端可以通过订阅这些管道来获取推送过来的信息。使用Redis的Pub/Sub,接收方在某个channel注册为一个订阅者,然后监听这个channel,一旦有消息发到这个channel上则自动接收消息, 利用这个特性可以轻易的实现消息推送功能。

  1. 使用Rediscli测试

  客户端A订阅通道:

redis 127.0.0.1:> SUBSCRIBE channeltest

  客户端B往该通道发送消息:

redis 127.0.0.1:> PUBLISH channeltest hello
(integer)
redis 127.0.0.1:> PUBLISH channeltest world
(integer)

  然后客户端A就能获取到推送的信息

redis 127.0.0.1:> SUBSCRIBE channeltest
Reading messages... (press Ctrl-C to quit)
) "subscribe"
) "channeltest"
) (integer)
) "message"
) "channeltest"
) "hello"
) "message"
) "channeltest"
) "world"

  2. 批量订阅测试

  客户端A订阅通道:

redis 127.0.0.1:> SUBSCRIBE channeltest*

  客户端B往该通道发送消息:

redis 127.0.0.1:6379> PUBLISH channeltest1 hello
(integer) 1
redis 127.0.0.1:6379> PUBLISH channeltest2 world
(integer)

  然后客户端A就能获取到推送的信息:

redis 127.0.0.1:> PSUBSCRIBE channeltest*
Reading messages... (press Ctrl-C to quit)
) "psubscribe"
) "channeltest*"
) (integer)
) "pmessage"
) "channeltest*"
) "channeltest1"
) "hello"
) "pmessage"
) "channeltest*"
) "channeltest2"
) "world"

  3. C#客户端实现

  客户端使用TeamDev.Redis

class Program
{
static void Main(string[] args)
{
try
{
RedisDataAccessProvider redisDataAccessProvider = new RedisDataAccessProvider();
redisDataAccessProvider = new RedisDataAccessProvider();
redisDataAccessProvider.Configuration.Host = "192.168.1.10";
redisDataAccessProvider.Configuration.Port = ;
redisDataAccessProvider.Connect(); redisDataAccessProvider.ChannelSubscribed += new ChannelSubscribedHandler(redisDataAccessProvider_ChannelSubscribed);
redisDataAccessProvider.MessageReceived += new MessageReceivedHandler(redisDataAccessProvider_MessageReceived);
redisDataAccessProvider.Messaging.Subscribe("al");
redisDataAccessProvider.Messaging.Subscribe("b1");
}
catch (Exception e)
{
Console.WriteLine("连接Redis错误:" + e.Message);
} Console.ReadLine();
} static void redisDataAccessProvider_MessageReceived(string channelname, string message)
{
if (channelname == "a1")
{
Console.WriteLine(message);
Console.ReadKey();
}
} static void redisDataAccessProvider_ChannelSubscribed(string channelname)
{
Console.WriteLine(channelname);
}
}

使用redis进行消息推送的更多相关文章

  1. php+redis 学习 五 消息推送

    <?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 发布 * * @example php publi ...

  2. C# BS消息推送 SignalR Hubs环境搭建与开发(二)

    1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 2. 开始开发 1)新建一个MVC项目,叫做SignalRDemo 2)安装SignalR包 In ...

  3. MPush开源消息推送系统:简洁、安全、支持集群

    引言由于之前自己团队需要一个消息推送系统来替换JPUSH,一直找了很久基本没有真正可用的开源系统所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理这一套代码,最近 ...

  4. 异步tcp通信——APM.Server 消息推送服务的实现

    消息推送服务 服务器推送目前流行就是私信.发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的:高性能.分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用 ...

  5. SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用

    最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的. 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件.是基于http协议,和W ...

  6. 开源实时消息推送系统 MPush

    系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...

  7. 使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽[开发篇]

    在以前的项目中,就曾听说过swoole的大名,想用来进行消息推送,但是当时只是有了初步的了解,并不敢大胆的运用到线上产品.所谓 识不足则多虑,威不足则多怒.所以就是怕,只能跟领导说了运用极光的推送功能 ...

  8. python 全栈开发,Day131(向app推送消息,玩具端消息推送)

    先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.4.zip 注意:由于涉及到 ...

  9. 用 centrifugo 搭建 消息推送服务器 docker + rancher 搭建

    关于消息推送服务器 目前有很多第三方的开放成熟的推送服务.鉴于项目需要 我们项目需要自己搭建 自己的推送服务. 我们的推送应用场景 聊天消息 项目内部消息提醒 移动设备接受消息 应用到的相关软件工具知 ...

随机推荐

  1. [小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)

    在使用xUnit.Net Framework构建单元测试或自动化测试项目的时候,无论是针对一些比较耗费资源的对象亦或是为了支持Test case预设数据的能力,我们都需要有一些初始化或是清理相关的动作 ...

  2. Lucene.net站内搜索—2、Lucene.Net简介和分词

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  3. Java RSA 分段加解密

    RSA加解密: 1024位的证书,加密时最大支持117个字节,解密时为128:2048位的证书,加密时最大支持245个字节,解密时为256. 加密时支持的最大字节数:证书位数/8 -11(比如:204 ...

  4. 实战手记:让百万级数据瞬间导入SQL Server

    想必每个DBA都喜欢挑战数据导入时间,用时越短工作效率越高,也充分的能够证明自己的实力.实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本文将向大家推荐一个挑战4秒极限让百万级数据瞬间 ...

  5. 玩转Docker之Docker简介(一)

    近几年掀起的docker热潮,可谓席卷全球.什么原因使它这么备受推崇呢?主要是因为它解决了行业痛点.玩linux的都知道,安装个应用时还要先安装所需环境.相关库.解决依赖关系.而docker的出现,很 ...

  6. go语言常用函数:make

    创建数组切片 Go语言提供的内置函数make()可以用于灵活地创建数组切片.创建一个初始元素个数为5的数组切片,元素初始值为0: mySlice1 := make([]int, 5) 创建一个初始元素 ...

  7. ArcGIS空间分析工具

    1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset (3D 要素工具集) Add Z Information 添加 Z 信息 添 ...

  8. jQuery源码解读 - 数据缓存系统:jQuery.data

    jQuery在1.2后引入jQuery.data(数据缓存系统),主要的作用是让一组自定义的数据可以DOM元素相关联——浅显的说:就是让一个对象和一组数据一对一的关联. 一组和Element相关的数据 ...

  9. Atitit jOrgChart的使用  组织架构图css html

    Atitit jOrgChart的使用  组织架构图css html 1. 项目要做组织架构图,要把它做成自上而下的树形结构,于是决定1 2. Html导入 以来的css js1 2.1. 数据来源 ...

  10. Servlet基础(三) Servlet的多线程同步问题

    Servlet基础(三) Servlet的多线程同步问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率. 由于Servlet/JSP默认是以多线程模式执行的, ...