Redis用作消息队列MQ
Posted LongtengGensSupreme
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis用作消息队列MQ相关的知识,希望对你有一定的参考价值。
本作者从下载地址:https://download.csdn.net/download/LongtengGensSupreme/12157626下载redis包解压到本地文件目录:E:\\Source\\redisfile\\Redis-x64-3.2.100,如下图所示
为了方便启动,我们在该目录下新建一个 startredis.bat 的文件,
然后将以下内容写入文件:redis-server redis.windows.conf
这个命令其实就是在调用 redis-server.exe 命令来读取 redis.window.conf 的内容,
双击刚才创建好的 startredis.bat 文件,就能成功的看到 Redis 启动,如下图所示:
redis-server启动之后放着就可以了。可以使用客户端自带工具来测试redis服务器是否可用,
Redis 自带的一个客户端工具,它可以用来连接到我们当前的 Redis 服务器,点击同一个文件夹下的 redis-cli.exe 文件,启动客户端,如下图
redis-cli客户端启动成功,如下图所示
我们做以下测试:在客户端dos界面输入 set key1 value1,回车,可以看到客户端显示:
在输入 get key1 回车,客户端显示:
通过上述工作,我们便在 Windows 的环境下安装好了Redis,我们的准备工作已完成,下面添加简单的使用Redis用作Redis用作消息队列MQ的案例,
以商品购买为案例,下单--》增加积分 如下:
2、新建项目控制台项目RedisMessageQueue,使用Nuget包管理器添加ServiceStack.Redis,
using System; using ServiceStack.Redis; namespace RedisMessageQueue { class Program { static void Main(string[] args) { Console.WriteLine("消息队列演示"); RedisClient redisClient = new RedisClient("localhost:6379"); string ss = "这是redisMQ"; Console.WriteLine($"消息队列输入内容:{ss}"); //生产者,LPush左端插入数据,RPush右端插入数据 redisClient.LPush("mq", System.Text.Encoding.UTF8.GetBytes(ss)); System.Diagnostics.Process.Start(@"F:\\Person\\linjie\\Logteng\\ConsoleApp1\\bin\\Debug\\netcoreapp3.1\\redisClientJiFen.exe"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); int i = 0; string sn = null; while (true) { sn = $"WG{DateTime.Now.ToString("yyyMMddHHmmssfffffff")}"; Console.WriteLine($"生成第 {i++} 个订单,订单号:{sn}"); Console.WriteLine("...........处理订单............"); Console.WriteLine($"订单 {sn} 处理完成"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3)); redisClient.LPush("mq", System.Text.Encoding.UTF8.GetBytes(ss + i++)); } //消费者,RPop右端取出数据,LPop左端取出数据 //byte[] bytes1 = redisClient.RPop("mq"); //string mr1 = System.Text.Encoding.UTF8.GetString(bytes1); //Console.WriteLine($"消息队列获取内容:{mr1}"); //LPush -----》RPop //RPush -----》LPop //消费者 RPop LPop BRPop BLPop //推模型 BRPop BLPop,被动的去接受数据 //拉模型 RPop LPop, 主动的去获收数据 //总结,一对一通讯 //byte[][] bytes = redisClient.BRPop("mq", 60); //byte[] bytes = redisClient.BRPopValue("mq", 60); //string mr = System.Text.Encoding.UTF8.GetString(bytes); //Console.WriteLine($"消息队列获取内容:{mr}"); //while (true) //{ // byte[] bytes = redisClient.RPop("mq"); // if (bytes != null) // { // string mr = System.Text.Encoding.UTF8.GetString(bytes); // Console.WriteLine($"{mr}"); // } // else // { // Console.WriteLine($"消息队列没有数据"); // } // System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); //} Console.ReadKey(); } } }
3、添加积分处理控制台项目redisClientJiFen
using ServiceStack.Redis; using System; namespace redisClientJiFen { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); RedisClient redisClient = new RedisClient("localhost:6379"); Console.WriteLine($"RedisClient连接成功"); while (true) { byte[] bytes = redisClient.RPop("mq"); if (bytes != null) { string mr = System.Text.Encoding.UTF8.GetString(bytes); Console.WriteLine($"订单 {mr} 处理积分完成"); } else { Console.WriteLine($"消息队列没有数据"); } System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); } } } }
4、运行效果
以上是关于Redis用作消息队列MQ的主要内容,如果未能解决你的问题,请参考以下文章