본문 바로가기
프로그래밍/데이터베이스

C# StackExchange로 Redis Sets 데이터 구조 사용하기

by bantomak 2024. 12. 3.
반응형

Redis Sets 사용하기

Redis Sets는 중복을 허용하지 않는 고유한 값들의 컬렉션을 저장하는 데이터 타입이다.

Sets는 집합 연산(교집합, 합집합, 차집합)을 지원하며 멤버 간의 관계를 파악하거나 필요한 멤버를 추출하는데 유용하다. 태그, 관심 주제, 온라인 사용자 목록과 같은 다양한 시나리오에서 중복 제거 및 멤버십 검사와 같은 작업을 효율적으로 수행할 수 있다.

C#에서 레디스 Sets 사용 예제 코드

public class RedisSetExample
{
    private readonly IDatabase _db;

    public RedisSetExample(IDatabase db)
    {
        _db = db;
    }

    public void AddTag(string itemId, string tag)
    {
        _db.SetAdd($"item_tags:{itemId}", tag);
    }

    public List<string> GetTags(string itemId)
    {
        var tags = _db.SetMembers($"item_tags:{itemId}");
        return tags.ToStringArray().ToList();
    }

    public void AddUserToSkillGroup(string skill, string userId)
    {
        _db.SetAdd($"skill:{skill}", userId);
    }

    public List<string> GetUsersWithSkill(string skill)
    {
        var users = _db.SetMembers($"skill:{skill}");
        return users.ToStringArray().ToList();
    }

    public List<string> GetCommonSkills(string userId1, string userId2)
    {
        var commonSkills = _db.SetIntersect($"user_skills:{userId1}", $"user_skills:{userId2}");
        return commonSkills.ToStringArray().ToList();
    }
}

레디스 데이터 타입 Sets

  • SADD key member [member ...] : 하나 이상의 멤버를 추가한다. 
  • SMEMBERS key : 해당 키의 멤버들을 조회한다. 
  • SCARD key : 해당 키의 집합이나 컬렉션 원소의 개수 또는 크기를 나타낸다.
  • SISMEMBER key member : 특정 멤버가 Sets에 속한 멤버인지 확인한다. 
  • SREM key member [member ...] : 하나 이상의 멤버를 Sets에서 제거한다. 
  • SPOP key [count] : 무작위 멤버를 하나 또는 여러 개 Pop 한다.
  • SINTER key [key ...] : 여러 sets 간의 교집합을 반환한다.
  • SUNION key [key ...] : 여러 sets 간의 합집합을 반환한다. 
  • SDIFF  key [key ...] : 여러 sets 간의 차집합을 반환한다. 
  • SRANDMEMBER key [count] : 무작위 멤버를 하나 또는 여러 개 반환한다. 

SADD

sadd myset 1 2 3 g test
(interger) 5

SMEMBERS

smembers myset
1) "1"
2) "2"
3) "3"
4) "g"
5) "test"

SCARD

sacrd myset
(interger) 5

SISMEMBER

sismember myset a
(interger) 0

sismember myset g
(interger) 1

SREM, SPOP

srem myset 1
(integer) 1

smembers myset
1) "2"
2) "3"
3) "g"
4) "test"

spop myset 1
1) "2"

smembers myset
1) "3"
2) "g"
3) "test"

SINTER, SUNION, SDIFF

sadd myset2 1 2 3 g
(integer) 4

smembers myset2
1) "1"
2) "2"
3) "3"
4) "g"

sinter myset myset2
1) "3"
2) "g"

sunion myset myset2
1) "3"
2) "g"
3) "test"
4) "1"
5) "2"

sdiff myset myset2
1) "test"

SRANDMEMBER

smembers myset
1) "3"
2) "g"
3) "test"

srandmember myset
"3"

참고 사이트

 

Redis sets

Introduction to Redis sets

redis.io

댓글