redis 간단 한 대기 열 실현

3912 단어 redis대열
작업 중 에 대기 열 에 자주 사용 되 는 장면 입 니 다.흔히 볼 수 있 는 rabbitMQ 와 같은 전문 적 인 구성 요 소 를 사용 합 니 다.홈 페이지 주 소 는:http://www.rabbitmq.com중요 한 것 은 공식 적 으로.net 클 라 이언 트 가 있 지만 rabbitMQ 에 익숙 하지 않 으 면 제3자 가 봉 인 된 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 Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
  {
   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 를 사용 하여 간단 하고 편리 하 게 실현 할 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기