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)