c\#레 디 스 를 조작 하 는 5 가지 기본 유형 집합
저희 프로젝트 에 서 는 보통 데 이 터 를 관계 형 데이터 베이스 에 저장 합 니 다.예 를 들 어 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\#레 디 스 를 조작 하 는 기본 유형 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.