DB/Redis

[Redis] Sets & Hashes

jungmin.park 2023. 12. 19. 19:31
본 게시물은 인프런 강의를 수강하고 작성된 게시물입니다.

 

Sets

Unique String 을 저장하는 정렬되지 않은 집합
Set Operation 사용 가능( ex. intersection, union, difference)

 

SADD, SMEMBERS

127.0.0.1:6379> sadd user:1:fruits apple banana orange orange
(integer) 3
127.0.0.1:6379> smembers user:1:fruits
1) "apple"
2) "banana"
3) "orange"
  • set은 집합 개념이기 때문에 중복되는 값은 들어가지 않는다.
  • sadd [멤버이름:멤버번호:key] value1, value2, value3.....
    • 시간복잡도 : 추가된 요소에 대해 O(1)을 가지며 여러 인수로 호출될때 N 요소를 추가하려면 O(N)
  • smembers 멤버이름:멤번호:키

 

SCARD

127.0.0.1:6379> scard user:1:fruits
(integer) 3
  • scard key(member:memberid:key)
    • 고유한 아이템의 수 : 현재 user:1:fruits에는 apple, banana, orange가 들어있으므로 총 3개

 

SISMEMBER

127.0.0.1:6379> sismember user:1:fruits banana
(integer) 1
127.0.0.1:6379> sismember user:1:fruits apple
(integer) 1
127.0.0.1:6379> sismember user:1:fruits lemon
(integer) 0
  • sismember set이름 : 특정 아이템이 해당 set에 포함되어있는지 알 수 있음.

 

SINTER

127.0.0.1:6379> sadd user:2:fruits apple lemon
(integer) 2
127.0.0.1:6379> smembers user:2:fruits
1) "apple"
2) "lemon"
127.0.0.1:6379> smembers user:1:fruits
1) "apple"
2) "banana"
3) "orange"
127.0.0.1:6379> sinter user:1:fruits user:2:fruits
1) "apple"
  • sinter : 두 Set의 교집합을 의미한다.

 

SDIFF

127.0.0.1:6379> sdiff user:1:fruits user:2:fruits
1) "banana"
2) "orange"
  •  sdiff : 두 set의 차집합을 의미한다. 즉 user:1:fruits 만 가지고 있는 value만 조회한다. 
    • user:1:fruits (A) user:2:fruits (B) 라고 할때 A-B 를 의미

 

SUNION

127.0.0.1:6379> sunion user:1:fruits user:2:fruits
1) "apple"
2) "banana"
3) "orange"
4) "lemon"
  • sunion : 두 set의 합집합을 의미한다.

Hashes

field-value 구조를 갖는 데이터 타입
다양한 속성을 갖는 객체의 데이터 타입을 저장할 때 유용
해시를 사용하면 무엇보다도 기본 개체를 나타내고 카운터 그룹을 지정할 수 있다.

 

해시 명령은 O(1)을 가진다.

127.0.0.1:6379> hset lecture name inflearn-redis price 100 language ko
(integer) 3
127.0.0.1:6379> hget lecture name
"inflearn-redis"
127.0.0.1:6379> hmget lecture price language invalid
1) "100"
2) "ko"
3) (nil)
127.0.0.1:6379> hincrby lecture price 10
(integer) 110
  • hset hashes 이름 field value / field value / field value : hashes 설정
  • hget : field로 value 조회
  • hmget : 여러 필드로 조회 없으면 (nil)
  • hincry : hashes에 있는 field에 해당하는 value을 특정 수만큼 증가 시킨다.

HVALS

127.0.0.1:6379> hset myhash field1 "hello"
(integer) 1
127.0.0.1:6379> hset myhash field2 "World"
(integer) 1
127.0.0.1:6379> hvals myhash
1) "hello"
2) "World"
  • HVALS key : 지정된 해시의 모든 값을 반환합니다.
  • 시간 복잡도 : O(N) N은 해시 크기

 

HSETNX

127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 1
127.0.0.1:6379> hsetnx myhash field "World"
(integer) 0
127.0.0.1:6379> hget myhash field
"Hello"
  • HSETNX key filed value : 아직 존재하지 않는 경우에만 field에 저장된 해시를 설정한다. 존재하지 않는 경우 해시가 포함된 새 키가 생성된다.
  • 시간복잡도: O(1)

 

Reference


https://redis.io/commands/sadd/