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、运行效果

猜你喜欢

转载自www.cnblogs.com/1175429393wljblog/p/12517452.html
今日推荐