Redis之品鉴之旅(四)
发布订阅,简单场景下的发布订阅完全可以使用。
可以简单的理解,将一个公众号视为发布者,关注公众号的人视作订阅者,公众号发布一条文章或者消息,凡事订阅公众号的都可以收到消息。一个人可以订阅多个公众号,一个公众号可以被多个人订阅。
//创建一个公众号--创建一个主题
Console.WriteLine("发布服务");
IRedisClientsManager redisClientManager = new PooledRedisClientManager("127.0.0.1:6379");
string topicname = "Send_Log";
RedisPubSubServer pubSubServer = new RedisPubSubServer(redisClientManager, topicname)
{
OnMessage = (channel, msg) =>
{
Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:ss")}");
Console.WriteLine("___________________________________________________________________");
},
OnStart = () =>
{
Console.WriteLine("发布服务已启动");
Console.WriteLine("___________________________________________________________________");
},
OnStop = () => { Console.WriteLine("发布服务停止"); },
OnUnSubscribe = channel => { Console.WriteLine(channel); },
OnError = e => { Console.WriteLine(e.Message); },
OnFailover = s => { Console.WriteLine(s); },
};
//接收消息
pubSubServer.Start();
while (1==1)
{
Console.WriteLine("请输入记录的日志");
string message = Console.ReadLine();
redisClientManager.GetClient().PublishMessage(topicname, message);
}
订阅方:
using (RedisClient consumer = new RedisClient("127.0.0.1", 6379, "12345", 10))
{
Console.WriteLine($"创建订阅异常信息数据库记录");
var subscription = consumer.CreateSubscription();
//接受到消息时
subscription.OnMessage = (channel, msg) =>
{
if (msg != "CTRL:PULSE")
{
Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:sss")}");
Logger.WriteLogByDB(msg);
Console.WriteLine("_________________________________记录成功__________________________________");
}
};
//订阅频道时 Mylist 利用数组
subscription.OnSubscribe = (channel) =>
{
Console.WriteLine("订阅客户端:开始订阅" + channel);
};
//取消订阅频道时
subscription.OnUnSubscribe = (a) => { Console.WriteLine("订阅客户端:取消订阅"); };
//订阅频道
string topicname = "Send_Log";
subscription.SubscribeToChannels(topicname);
}
订阅方2:
using (RedisClient consumer = new RedisClient("127.0.0.1", 6379, "12345", 10))
{
Console.WriteLine($"创建订阅异常信息文本记录");
var subscription = consumer.CreateSubscription();
//接受到消息时
subscription.OnMessage = (channel, msg) =>
{
if (msg != "CTRL:PULSE")
{
Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:sss")}");
Logger.WriteTxtLogs("log", "异常", msg);
Console.WriteLine("_________________________________记录成功__________________________________");
}
};
//订阅频道时
subscription.OnSubscribe = (channel) =>
{
Console.WriteLine("订阅客户端:开始订阅" + channel);
};
//取消订阅频道时
subscription.OnUnSubscribe = (a) => { Console.WriteLine("订阅客户端:取消订阅"); };
//订阅频道
string topicname = "Send_Log";
subscription.SubscribeToChannels(topicname);
}
Redis之品鉴之旅(四)的更多相关文章
- Redis之品鉴之旅(一)
Redis之品鉴之旅(一) 好知识就如好酒,需要我们坐下来,静静的慢慢的去品鉴.Redis作为主流nosql数据库,在提升性能的方面是不可或缺的.下面就拿好小板凳,我们慢慢的来一一品鉴. 1)redi ...
- Redis之品鉴之旅(七)
分布式锁 1)阻塞锁: 尝试在redis中创建一个字符串结构缓存,方法传入的key,value为锁的过期时间timeout的时间戳. 若redis中没有这个key,则创建成功(即抢到锁),然后立即返回 ...
- Redis之品鉴之旅(六)
持久化 快照的方式(RDB) 文件追加方式(AOF) 快照形式: save和bgsave能快速的备份数据.但是.........., Save命令:将内存数据镜像保存为rdb文件,由于redis是单线 ...
- Redis之品鉴之旅(五)
Redis事务 原子性:就是最小的单位 一致性:好多命令,要么全部执行成功,要么全部执行失败 隔离性:一个会话和另一个会话之间是互相隔离的 持久性:执行了就执行了,数据保存在硬盘上 典型例子:银行转账 ...
- Redis之品鉴之旅(二)
2)hash类型,上代码 using (RedisClient client = new RedisClient("127.0.0.1", 6379, "12345&qu ...
- Redis之品鉴之旅(三)
3)Set,可以去重的.无序的集合.可以取交集.并集.zset(sorted set),有序的.去重的集合,排序不是根据value排序,而是根据score排序. using (RedisClient ...
- redis成长之路——(四)
加强redis连接的连接池 虽然StackExchange.Redis针对连接已经做了很多工作,不过在实际应用场景中还是不够的,比如多实例的vip就会导致只能连到其中一个实例上等:本实例中的连接池只能 ...
- Redis源码阅读(四)集群-请求分配
Redis源码阅读(四)集群-请求分配 集群搭建好之后,用户发送的命令请求可以被分配到不同的节点去处理.那Redis对命令请求分配的依据是什么?如果节点数量有变动,命令又是如何重新分配的,重分配的过程 ...
- Hexo之旅(四):文章编写技巧
hexo 编写文章可以使用以下命令创建hexo new "文件名" #创建的文章会在_pots目录下文章的后缀名是以md命名的文件格式,遵循markdown语法,所以编写文章可以使 ...
随机推荐
- 【springboot】知识点总结
[springboot 基础编] 01.SpringBoot>01 - 第一个应用–HelloWorld 02.SpringBoot>02 - 整合 MyBatis 03.SpringBo ...
- 十六:使用JDBC对数据库进行CRUD
一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...
- 战胜了所有对手,却输给了时代。MVVM--jQuery永远的痛。
前言 第二次浏览器战争中,随着以 Firefox 和 Opera 为首的 W3C 阵营与 IE 对抗程度的加剧,浏览器碎片化问题越来越严重,不同的浏览器执行不同的标准,对于开发人员来说这是一个恶梦.为 ...
- 【Office Excel】vlookup函数的反向查找实例教程,不只是正向查找,还可以反向查找,实例讲解
VLOOKUP 反向查询 众所周知,vlookup只能从左向右查找,而不能从右至左的反向查找.为此高手们设计了一个让无数新手迷惑的公式.今天优爱酷将彻底帮同学们解开这个迷团. [例]如下图所示要求根据 ...
- GUI容器之布局管理器
布局管理器 布局管理器:frame.setLayout(); 默认值为new flowLayout() 流式布局 frame.setLayout(new FlowLayout(FlowLayout.R ...
- CSS 是啥?前端小白入门级理解
What is CSS? CSS stands for Cascading Style Sheets CSS describes how HTML elements are to be display ...
- HashMap 为什么线程不安全?
作者:developer http://cnblogs.com/developer_chan/p/10450908.html 我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线 ...
- Android系统编程入门系列之应用内数据保存数据库
上篇文章已经介绍了如何使用SharedPreferences存储键值对形式的轻量级数据,对于那些相同结构的多组数据,类似于存储Java中定义的类的多个对象属性值,如果按照键值对的形式一条条读写,需要分 ...
- [源码解析] 深度学习流水线并行 PipeDream(4)--- 运行时引擎
[源码解析] 深度学习流水线并行 PipeDream(4)--- 运行时引擎 目录 [源码解析] 深度学习流水线并行 PipeDream(4)--- 运行时引擎 0x00 摘要 0x01 前言 1.1 ...
- unity2021游戏引擎安装激活并汉化
今天重新搭建了下unity的开发环境,也踩了不少坑,还有就是看了一些unity3d的教程,越看越不可思议,unity居然能做这么多好玩的东西,像枪战类,模拟类,角色扮演,动作冒险都很震撼. 但是震撼归 ...