服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - redis实现简单队列

redis实现简单队列

2019-10-31 16:24王立新 Redis

这篇文章主要为大家详细介绍了redis实现简单队列的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

操作redis简单封装如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static class RedisHelper
 {
  public static int i = 0;
  private static string redisConnectionString = ConfigurationManager.AppSettings["RedisConnectionString"].ToString();
 
  private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
  {
   i++;
   return ConnectionMultiplexer.Connect(redisConnectionString);
  });
 
  public static ConnectionMultiplexer Instance
  {
   get
   {
    return lazyConnection.Value;
   }
  }
 }

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// <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);
 }
}

测试代码如下:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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();
  }

然后有消费队列的程序:

?
1
2
3
4
5
6
7
8
9
static void Main(string[] args)
  {
   var queue = new SimpleRedisQueue();
   while (true)
   {
    var v = queue.RightPop("test1");
    Console.WriteLine(v == null ? "空" : v);
   }
  }

测试结果截图

redis实现简单队列

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

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

延伸 · 阅读

精彩推荐
  • RedisLinux Redis 的安装步骤详解

    Linux Redis 的安装步骤详解

    这篇文章主要介绍了 Linux Redis 的安装步骤详解的相关资料,希望大家通过本文能掌握如何安装Redis,需要的朋友可以参考下 ...

    carl-zhao3822019-11-08
  • Redis在ssm项目中使用redis缓存查询数据的方法

    在ssm项目中使用redis缓存查询数据的方法

    本文主要简单的使用Java代码进行redis缓存,即在查询的时候先在service层从redis缓存中获取数据。如果大家对在ssm项目中使用redis缓存查询数据的相关知识感...

    caychen8962019-11-12
  • RedisRedis数据结构之链表与字典的使用

    Redis数据结构之链表与字典的使用

    这篇文章主要介绍了Redis数据结构之链表与字典的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    白泽来了4052021-08-03
  • Redisredis启动,停止,及端口占用处理方法

    redis启动,停止,及端口占用处理方法

    今天小编就为大家分享一篇redis启动,停止,及端口占用处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    澄海单挑狂5152019-11-14
  • Redis聊一聊Redis与MySQL双写一致性如何保证

    聊一聊Redis与MySQL双写一致性如何保证

    一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。本文给大家分享Redis与MySQL双写一致性该如何保证,感兴趣的朋友一...

    mind_programmonkey6432021-08-12
  • RedisRedis存取序列化与反序列化性能问题详解

    Redis存取序列化与反序列化性能问题详解

    这篇文章主要给大家介绍了关于Redis存取序列化与反序列化性能问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    这名字已经存在9742021-02-24
  • Redis就这?Redis持久化策略——AOF

    就这?Redis持久化策略——AOF

    今天为大家介绍Redis的另一种持久化策略——AOF。注意:AOF文件只会记录Redis的写操作命令,因为读命令对数据的恢复没有任何意义...

    头发茂密的刘叔4052021-12-14
  • RedisRedis分布式锁升级版RedLock及SpringBoot实现方法

    Redis分布式锁升级版RedLock及SpringBoot实现方法

    这篇文章主要介绍了Redis分布式锁升级版RedLock及SpringBoot实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以...

    等不到的口琴7802021-07-25