c\#레 디 스 를 조작 하 는 5 가지 기본 유형 집합

11785 단어 c#조작 하 다.redis
머리말
저희 프로젝트 에 서 는 보통 데 이 터 를 관계 형 데이터 베이스 에 저장 합 니 다.예 를 들 어 Oracle,SQL Server,Mysql 등 입 니 다.그러나 관계 형 데이터 베 이 스 는 병행 에 대한 지원 이 강하 지 않 습 니 다.그러면 시스템 의 성능 이 좋 지 않 고 저 장 된 데 이 터 는 대부분이 구조 화 된 데이터 입 니 다.비구 조 적 데이터(예 를 들 어 텍스트)와 반구 조 화 된 데이터(예 를 들 어 JSon)는 유연 하지 않 고 관계 형 데이터 베이스 가 아 닌 이 두 가 지 를 잘 보완 했다.우 리 는 읽 기 작업 이 빈번 한 데 이 터 를 Redis 에 기록 하고 Key-value 방식 으로 저장 하여 성능 을 향상 시킨다.
Redis 는 5 가지 데이터 형식 을 지원 합 니 다:string(문자열),hash(해시),list(목록),set(집합)및 zset(sorted set:질서 있 는 집합).다음은.net 에서 redis 5 가지 데이터 형식 을 조작 하 는 기본 문법 을 소개 한다.
1.String 데이터 형식의 응용 장면
1.프로필
string 은 redis 의 가장 기본 적 인 유형 입 니 다.Memcached 와 똑 같은 유형 으로 이해 할 수 있 습 니 다.하나의 key 는 하나의 value 에 대응 합 니 다.
string 형식 은 바 이 너 리 가 안전 합 니 다.redis 의 string 은 모든 데 이 터 를 포함 할 수 있다 는 뜻 입 니 다.예 를 들 어 jpg 그림 이나 직렬 화 된 대상.
string 형식 은 Redis 의 가장 기본 적 인 데이터 형식 으로 string 형식의 값 은 최대 512 MB 를 저장 할 수 있 습 니 다.
2.필드 사용
간단 한 키 값 을 저장 합 니 다.예 를 들 어 우 리 는 특정한 사이트 의 조회 수,관심 사,팬 덤 등 을 통계 해 야 합 니 다.
3.C\#사용 예
주소,사용자 이름,비밀번호,동기 화 시간 등 웹 서비스 인터페이스의 인 자 를 저장 해 야 합 니 다.전단 페이지 에서 JSon 문자열 로 포맷 할 수 있 습 니 다.
그리고 Ajax 를 통 해 서버 에 전달 하여 Redis 에 저장 합 니 다.코드 는 다음 과 같 습 니 다.

/// <summary>
  ///      Redis   
  /// GHB BY 2020-06-26
  /// </summary>
  /// <param name="KeyName">        ,     redis        </param>
  /// <param name="configInfo">         </param>
  /// <returns>       </returns>
  public string SaveConfigInfoToRedis(string KeyName, string configInfo)
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    if (client == null) return "    !";
    if (client.ContainsKey(KeyName))
     client.Replace<string>(KeyName, configInfo);
    else
     client.Set<string>(KeyName, configInfo);
    return "    !";
   }
  }
저장 에 성공 하면 redis 시각 화 도구 에서 우리 가 저장 한 정 보 를 볼 수 있 습 니 다.

다음 에 데 이 터 를 불 러 올 때 Key 에 따라 이 string 문자열 을 읽 고 Hashtable 로 포맷 한 다음 JOSN 형식 으로 정렬 하여 전단 으로 돌아 가면 폼 으로 보 여 줍 니 다.
폼 에서 저장 등 작업 을 수정 할 수 있 고 매개 변수의 설정 을 실현 할 수 있 습 니 다.이 읽 기 코드 는 다음 과 같 습 니 다.

/// <summary>
  ///  redis       ,          
  /// GHB BY 2020-06-26
  /// </summary>
  /// <param name="KeyName">       </param>
  /// <returns>         </returns>
  public string LoadConfigFromRedis(string KeyName)
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    if (client == null) return string.Empty;
    string configData = client.Get<string>(KeyName);
    if (string.IsNullOrWhiteSpace(configData))
     return string.Empty;
    Hashtable data = JsonConvert.DeserializeObject<Hashtable>(configData);
    return JsonConvert.SerializeObject(data);

   }
  }
2.hash(해시)
1.프로필
Redis hash 는 키 값(key=>value)대 집합 입 니 다.
Redis hash 는 string 형식의 field 와 value 의 맵 표 로 hash 는 저장 대상 에 특히 적합 합 니 다.
2.필드 사용
저 희 는 일부 정 보 를 유연 하 게 저장 해 야 합 니 다.특히 대상 의 정 보 를 저장 하기에 적합 합 니 다.예 를 들 어 사용자 정보,설정 정보 등 입 니 다.
3.C\#사용 조작 예시
위 에서 string 형식의 대상 을 사용 하여 설정 정 보 를 저장 하 는 데 이러한 문제 가 존재 하기 때문에 직렬 화 와 반 직렬 화 와 관련 된 것 입 니 다.정 보 량 이 많 으 면 시스템 성능 을 떨 어 뜨 립 니 다.
그러면 여기 서 우 리 는 Hash 데이터 구 조 를 사용 하여 위의 정 보 를 저장 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

/// <summary>
  ///   redis hashtable  
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateHash()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb",1))
   {
    Dictionary<string, string> configDic = new Dictionary<string, string>();
    configDic.Add("config_IP", "localhost");
    configDic.Add("config_Port", "1521");
    configDic.Add("config_serviceName", "orcl");
    configDic.Add("config_userName", "DE_POWERPMS");
    configDic.Add("config_password", "cppepass");
    client.SetRangeInHash("config_info", configDic);
    Dictionary<string, string> testHash = client.GetAllEntriesFromHash("config_info");
    foreach (var item in testHash)
    {
     Console.WriteLine("Hash key :{0}   :{1}", item.Key, item.Value);
    }
    Console.ReadLine();
   }
  }
redis 시각 화 도 구 를 사용 하면 방금 저장 할 수 있 는 데 이 터 는 다음 과 같 습 니 다.

3.List(리스트)
1.프로필
Redis 목록 은 간단 한 문자열 목록 으로 삽입 순서에 따라 정렬 됩 니 다.목록 의 머리(왼쪽)나 끝(오른쪽)에 요 소 를 추가 할 수 있 습 니 다.list 의 push 작업 으로 작업 을 List 에 저장 할 수 있 습 니 다.
그리고 pop 작업 을 사용 하여 작업 을 꺼 내 서 실행 합 니 다.목록 의 머리 나 끝 에 있 는 작업 데 이 터 는 매우 효율 적 이 고 대기 열 길이 의 영향 을 받 지 않 습 니 다.
목록 은 최대 232-1 요소(4294967295,목록 당 40 억 여 개 저장 가능)를 저장 할 수 있 습 니 다.
2.필드 사용
redis 의 list 데이터 형식 은 대부분의 사용자 에 게 대기 열 서 비 스 를 실현 하 는 가장 경제적 이 고 간단 한 방식 입 니 다.
또한 list 구조의 데이터 조회 양 끝 부근의 데이터 성능 이 매우 좋 기 때문에 최신 데 이 터 를 얻어 야 하 는 장면,예 를 들 어 뉴스 류 에 응 용 된'최근 뉴스',돈 N 개 사용자 목록 등 이 적합 하 다.
3.C\#사용 조작 예시
대기 열 사용 에 있어 서,예 를 들 어 여러 클 라 이언 트 가 프린터 인쇄 작업 을 필요 로 하 는 경우,대기 열 을 사용 하여 작업 의 줄 을 서서,대기 열 순서에 따라 인쇄 를 시작 합 니 다.
스 택 의 사용,예 를 들 어 이 진 트 리 의 옮 겨 다 니 기,괄호 의 일치 등 우 리 는 선진 적 인 순서 로 완성 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

/// <summary>
  ///   redis List  
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateList()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region List    
    client.EnqueueItemOnList("QueueList", "    1"); //  
    client.EnqueueItemOnList("QueueList", "    2");
    client.EnqueueItemOnList("QueueList", "    3");
    client.EnqueueItemOnList("QueueList", "    4");
    long q = client.GetListCount("QueueList");
    Console.WriteLine("            ");
    for (int i = 0; i < q; i++)
    {
     Console.WriteLine("QueueList   :{0}", client.DequeueItemFromList("QueueList"));
    }
    Console.WriteLine("            ");
    #endregion
    #region    
    client.PushItemToList("StackList", "    1"); //  
    client.PushItemToList("StackList", "    2");
    client.PushItemToList("StackList", "    3");
    client.PushItemToList("StackList", "    4");
    Console.WriteLine("    ");
    long p = client.GetListCount("StackList");
    for (int i = 0; i < p; i++)
    {
     Console.WriteLine("StackList   :{0}", client.PopItemFromList("StackList"));
    }
    Console.WriteLine("    ");
    Console.ReadLine();
    #endregion
   }
  }
실행 결과 에 따 르 면 대기 열 은 먼저 작업 을 하고 스 택 은 선진 적 인 후에 작업 을 하 며 작업 이 끝 난 후에 데이터 가 삭 제 됩 니 다.그림 과 같 습 니 다.

4.Set(집합)
1.프로필
Redis 의 Set 은 string 형식의 무질서 한 집합 입 니 다.
집합 은 해시 표를 통 해 이 루어 지기 때문에 추가,삭제,검색 의 복잡 도 는 모두 O(1)이다.
집합 중 가장 큰 구성원 수 는 232-1(4294967295 로 집합 당 40 억 여 명의 구성원 을 저장 할 수 있다)이다.
Redis zset 는 set 와 마찬가지 로 string 형식 요소 의 집합 이 며 중복 되 는 구성원 은 허용 되 지 않 습 니 다.
2.필드 사용
집합 은 주로 교차,집합,보충 등 이 필요 한 장면 에 응용 된다.예 를 들 어 우 리 는 공동 친구,공동 취미,공동 관심 을 가 져 야 하 는 웨 이 보,같은 계 정 여러 곳 의 로그 인 시스템 을 제한 하 는 등 장면 이다.
3.C\#사용 조작 예시
예 를 들 어 현재 두 개의 QQ 사용 자 를 예 로 들 면 QQ 사용자 1 과 QQ 사용자 2 는 각자 의 친구 가 있 습 니 다.지금 우 리 는 집합 을 통 해 그들의 공동 친 구 를 얻 을 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

/// <summary>
  ///   redis Set  
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateSet()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region Set  
    client.AddItemToSet("QQ  1", "  A");
    client.AddItemToSet("QQ  1", "  B");
    client.AddItemToSet("QQ  1", "  C");
    client.AddItemToSet("QQ  1", "  D");

    client.AddItemToSet("QQ  2", "  C");
    client.AddItemToSet("QQ  2", "  F");
    client.AddItemToSet("QQ  2", "  G");
    client.AddItemToSet("QQ  2", "  D");
    var setunion = client.GetIntersectFromSets("QQ  1", "QQ  2");
    Console.WriteLine("QQ  1 QQ  2      :");
    foreach (var item in setunion)
    {
     Console.WriteLine(item);
    }
    Console.ReadLine();
    #endregion
   }
  }
실행 결과 에 따 르 면 그들의 공동 친 구 는 친구 C 와 친구 D 입 니 다.

5.zset(sorted set:질서 있 는 집합)
1.프로필
set 를 바탕 으로 집합 에 있 는 모든 요소 에 하나의 점 수 를 연결 하고 질서 있 는 집합 에 데 이 터 를 삽입 할 때 이 점수 에 따라 자동 으로 정렬 합 니 다.서로 다른 것 은 모든 요소 가 하나의 double 유형의 점수 와 관련 이 있다 는 것 이다.
redis 는 바로 점 수 를 통 해 집합 중인 구성원 을 위해 어 릴 때 부터 큰 순 서 를 매 긴 다.
zset 의 구성원 은 유일한 것 이지 만 점수(score)는 중복 할 수 있다.
2.필드 사용
집합 유형의 장면 에 정렬 을 넣 으 면 질서 있 게 집합 하 는 응용 장면 이다.예 를 들 어 친구 의'친밀 도'정렬 에 따라 친구 목록 을 표시 합 니 다.
3.C\#사용 조작 예시
예 를 들 어 현재 많은 앵 커 들 이 있 고 모든 앵 커 들 이 팬 들 이 준 선물 이 있 습 니 다.지금 은 우리 가 선물 수량 이 가장 많은 3 위 안에 드 는 앵 커 가 필요 합 니 다.그러면 SortedSet 으로 이 루어 질 수 있 습 니 다.
각 앵 커 에 게 선물 수량 을 저장 할 수 있 는 점 수 를 정의 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

/// <summary>
  ///   redis SortedSet  
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateSortedSet()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region Set  
    client.AddItemToSortedSet("GiftSortedSet", "  1", 24);
    client.AddItemToSortedSet("GiftSortedSet", "  2", 564);
    client.AddItemToSortedSet("GiftSortedSet", "  3", 746);
    client.AddItemToSortedSet("GiftSortedSet", "  4", 2357);
    client.IncrementItemInSortedSet("GiftSortedSet", "  2", new Random().Next(200, 500));
    Console.WriteLine("            :");
    foreach (var item in client.GetRangeWithScoresFromSortedSet("GiftSortedSet",1,3))
    {
     Console.WriteLine($" :{item.Key}   :{item.Value}");
    }
    Console.ReadLine();
    #endregion
   }
  }
실행 한 후에 우 리 는 선물 수 3 위 안에 드 는 앵 커 를 볼 수 있 습 니 다.실행 결 과 는 다음 과 같 습 니 다.

총결산
이상 은.NET 환경 에서 Redis 5 가지 데이터 유형 을 조작 하 는 모든 방법 을 정리 한 것 입 니 다.우 리 는 Redis 가 데이터 구조 서버 라 는 것 을 볼 수 있 습 니 다.이 5 가지 데이터 유형 에 대해 우 리 는 많은 조작 을 실현 할 수 있 습 니 다.
예 를 들 어 문자열 에 대한 추가 작업;해시 의 값 증가 하기;목록 에 요소 추가 하기;집합 의 교 집합,집합 과 차 집합 을 계산 합 니 다.정렬 집합 을 사용 하여 순위 등 을 가 져 옵 니 다.
자,여기 서 c\#레 디 스 를 조작 하 는 5 가지 기본 유형 을 모 은 글 을 소개 합 니 다.더 많은 c\#레 디 스 를 조작 하 는 기본 유형 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기