• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    redis实现简单队列

    在工作中,时常会有用到队列的场景,比较常见的用rabbitMQ这些专业的组件,官网地址是:http://www.rabbitmq.com,重要的是官方有.net的客户端,但是如果对rabbitMQ不熟悉的话,建议使用第三方封装好的 EasyNetQ,rabbitMQ比较适合对安全性,稳定性要求较高的地方,但有时我们也会有对这方面要求不是很高的场景,比如:文章阅读数,实时性要求不是很高的地方,所以我想到了用redis来做队列。

    redis 的List结构本身就是一个链表 (双向链表),所以符合我们的队列先进先出的要求。

    我用的是StackExchange.Redis 这个组件来操作redis,以前一直用 Service.Stack.Redis,后来该类库升级后对个人使用有次数限制,需要付费使用才能没有调用限制.

    操作redis简单封装如下:

    public static class RedisHelper
     {
      public static int i = 0;
      private static string redisConnectionString = ConfigurationManager.AppSettings["RedisConnectionString"].ToString();
     
      private static LazyConnectionMultiplexer> lazyConnection = new LazyConnectionMultiplexer>(() =>
      {
       i++;
       return ConnectionMultiplexer.Connect(redisConnectionString);
      });
     
      public static ConnectionMultiplexer Instance
      {
       get
       {
        return lazyConnection.Value;
       }
      }
     }
    

    有了这个操作类后,我们就可以操作redis了,简单的对 list 的操作如下:

    /// summary>
    /// 简单 redis 队列
    /// /summary>
    public class SimpleRedisQueue
    {
     public void LeftPush(string key, string value)
     {
      var redis = RedisHelper.Instance.GetDatabase();
      redis.ListLeftPush(key, value);
     }
     
     
     public string RightPop(string key)
     {
      var redis = RedisHelper.Instance.GetDatabase();
      return redis.ListRightPop(key);
     }
    }

    测试代码如下:

    首先需要一个生产数据的程序

    static void Main(string[] args)
      {
       System.Threading.Tasks.Task.Factory.StartNew(() =>
       {
        for (var i = 0; i  99999999; i++)
        {
         new WLX.SimpleUtil.Redis.SimpleRedisQueue().LeftPush("test1", "a_" + i.ToString());
        }
       });
     
     
       System.Threading.Tasks.Task.Factory.StartNew(() =>
       {
        for (var i = 0; i  99999999; i++)
        {
         new WLX.SimpleUtil.Redis.SimpleRedisQueue().LeftPush("test1", "b_" + i.ToString());
        }
       });
       System.Threading.Tasks.Task.Factory.StartNew(() =>
       {
        for (var i = 0; i  9999; i++)
        {
         new WLX.SimpleUtil.Redis.SimpleRedisQueue().LeftPush("test1", "c_" + i.ToString());
        }
       });
       System.Threading.Tasks.Task.Factory.StartNew(() =>
       {
        for (var i = 0; i  99999999; i++)
        {
         new WLX.SimpleUtil.Redis.SimpleRedisQueue().LeftPush("test1", "e_" + i.ToString());
        }
       });
       System.Threading.Tasks.Task.Factory.StartNew(() =>
       {
        for (var i = 0; i  99999999; i++)
        {
         new WLX.SimpleUtil.Redis.SimpleRedisQueue().LeftPush("test1", "f_" + i.ToString());
        }
       });
       Console.ReadKey();
      }

    然后有消费队列的程序:

    static void Main(string[] args)
      {
       var queue = new SimpleRedisQueue();
       while (true)
       {
        var v = queue.RightPop("test1");
        Console.WriteLine(v == null ? "空" : v);
       }
      }
    

    测试结果截图

    对可靠性和稳定性要求不高的应用场景,可以使用redis简单方便的实现。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • redis 队列操作的例子(php)
    • php中使用redis队列操作实例代码
    • 详解Redis用链表实现消息队列
    • 关于 Laravel Redis 多个进程同时取队列问题详解
    上一篇:Redis集合类型的常用命令小结
    下一篇:Redis主从实现读写分离
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    redis实现简单队列 redis,实现,简单,队列,redis,