-
Redis Data Types 요약공부하기/데이터베이스 2023. 3. 3. 21:00
Keys
레디스 key는 binary safe하며 "tscalm" 같은 문자열에서 JPEG 파일까지 모든 바이너리 시퀀스를 키로 사용할 수 있고 빈 문자열도 유효한 키이다.
키에 대한 몇 가지 다른 규칙:
- 긴 키 네임은 조회 비용이 많이 들기 때문에 권장되지 않는다.
- 키 네임이 짧은 것 또한 무조건 좋은게 아니다.
- 예를 들어 (1)user:1000, (2)u1000 두개의 키가 존재할 때 (1번)이 더 가독성이 좋고 키를 저장하거나 조회하는데 사용되는 메모리의 차이는 신경쓸 정도가 아니다.
- object-type:id 같은 스키마를 정의해서 사용하며 여러 단어로 이뤄진 필드는 . 또는 - 로 구분한다.
- 예를 들어 "comment:4321:reply.to" or "comment:4321:reply-to".
- 허용되는 최대 키 크기는 512MB
Strings
- Redis 키와 연결할 수 있는 가장 간단한 유형의 값이며 Redis 키는 문자열이므로 문자열 유형도 값으로 사용할 때 문자열을 다른 문자열에 매핑합니다.
- 값은 모든 종류의 문자열(바이너리 데이터 포함)이 될 수 있고 512MB보다 클 수 없다.
SET, GET 명령으로 문자열 값을 설정하고 검색할 수 있다.
127.0.0.1:6379> set mykey test OK 127.0.0.1:6379> get mykey "test" 127.0.0.1:6379> set mykey newTest OK 127.0.0.1:6379> get mykey "newTest" 127.0.0.1:6379>
-> set 명령으로 mykey라는 키에 test라는 값을 저장한 후 get 명령으로 저장된 값을 검색할 수 있다.
-> mykey에 새로운 값을 저장하여 기존 값을 대체할 수 있다.
SET 명령은 'nx', 'xx' 플래그를 사용하여 해당 키(Key)가 이미 존재하는 경우에 대한 처리 방식을 지정할 수 있다.
127.0.0.1:6379> get mykey "newTest" 127.0.0.1:6379> set mykey newval nx (nil) 127.0.0.1:6379> get mykey "newTest" 127.0.0.1:6379> set mykey newval xx OK 127.0.0.1:6379> get mykey "newval"
-> nx 플래그는 키가 존재하지 않을 경우에만 값을 저장한다.
-> 반대로 xx 플래그는 키가 존재할 때만 값을 저장한다.
키(Key)의 값을 증가시키거나 감소시키는 명령어 ( INCR, INCRBY, DECR, DECRBY )
(1) INCR: 키(Key)의 값을 1씩 증가
- INCR counter 명령어는 counter라는 키의 값을 1 증가
- 만약 counter의 값이 정수형이 아닌 다른 데이터 타입이라면 에러가 발생
127.0.0.1:6379> get counter (nil) 127.0.0.1:6379> INCR counter (integer) 1 127.0.0.1:6379> get counter "1" 127.0.0.1:6379> INCR counter (integer) 2 127.0.0.1:6379> get counter "2" [ 값이 정수가 아닌 경우 에러 발생 ] 127.0.0.1:6379> INCR mykey (error) ERR value is not an integer or out of range
(2) INCRBY: 키(Key)의 값을 지정한 숫자만큼 증가
- INCRBY counter 5 명령어는 counter라는 키의 값을 5 증가
- 만약 counter의 값이 정수형이 아닌 다른 데이터 타입이라면 에러가 발생
127.0.0.1:6379> INCRBY counter 5 (integer) 7 127.0.0.1:6379> get counter "7"
(3) DECR: 키(Key)의 값을 1씩 감소
- DECR counter 명령어는 counter라는 키의 값을 1 감소
- 만약 counter의 값이 정수형이 아닌 다른 데이터 타입이라면 에러가 발생
127.0.0.1:6379> get counter "7" 127.0.0.1:6379> DECR counter (integer) 6
(4) DECRBY: 키(Key)의 값을 지정한 숫자만큼 감소
- DECRBY mykey 5 명령어는 mykey라는 키의 값을 5 감소
- 만약 mykey의 값이 정수형이 아닌 다른 데이터 타입이라면 에러가 발생
127.0.0.1:6379> get counter "6" 127.0.0.1:6379> DECRBY counter 5 (integer) 1 127.0.0.1:6379> get counter "1"
단일 명령( MSET, MGET )으로 여러 키의 값을 저장하거나 조회하는 기능은 대기 시간 단축에 유용하다.
MSET, MGET 명령을 사용하여 여러 개의 키(Key)와 값을 처리하는 경우 단일 키(Key)와 값을 처리하는 것보다 더 효율적이다.
(1) MSET 명령어
- 여러 개의 키와 값을 동시에 저장하는 명령어
- 만약 인자 중 하나의 키(Key)가 이미 존재한다면 그 값을 덮어쓴다.
(2) MGET 명령어
- MGET 명령어는 여러 개의 키(Key)에 해당하는 값을 조회하는 명령어
- 여러 개의 키(Key)를 인자로 받아서 해당하는 값들을 리스트(List) 형태로 반환
- 만약 조회하는 키(Key)가 존재하지 않는다면 그 값은 null로 반환
127.0.0.1:6379> mset a 10 b 20 c 30 OK 127.0.0.1:6379> mget a b c 1) "10" 2) "20" 3) "30" 127.0.0.1:6379> get a "10" 127.0.0.1:6379> get b "20" 127.0.0.1:6379> get c "30"
키가 존재하는지 확인하는 명령 EXIST
- 주어진 키가 데이터베이스에 존재하는지 여부를 확인한다.
- 여러개의 키가 존재하는지 확인할 수 있고 존재하는 키의 갯수를 반환한다.
127.0.0.1:6379> exists a (integer) 1 127.0.0.1:6379> exists a b (integer) 2 127.0.0.1:6379> exists a b c d (integer) 3 127.0.0.1:6379> get d (nil) 127.0.0.1:63
키를 삭제하는 명령어 DEL
- 주어진 키 값을 삭제한다.
- 여러개의 키 값을 삭제할 수 있다.
127.0.0.1:6379> mget a b c 1) "10" 2) "20" 3) "30" 127.0.0.1:6379> del b c (integer) 2 127.0.0.1:6379> mget a b c 1) "10" 2) (nil) 3) (nil)
키에 저장된 값의 타입을 확인하는 명령어 TYPE
- 저장된 값의 타입을 반환한다.
- 값이 존재하지 않는 경우 none을 반환한다.
127.0.0.1:6379> mget counter a mykey 1) "1" 2) "10" 3) "newval" 127.0.0.1:6379> type counter string 127.0.0.1:6379> type a string 127.0.0.1:6379> type mykey string 127.0.0.1:6379> type non-existent-key none
키의 만료 관련 명령어 ( EXPIRE, EXPIREAT, PERSIST, PEXPIRE, PEXPIREAT )
(1) EXPIRE : 특정 키(Key)에 대한 유효기간(Expiration)을 초 단위로 설정하는 명령어입니다.
[ 예제1 ] 127.0.0.1:6379> set test-key exiretest OK 127.0.0.1:6379> get test-key "exiretest" 127.0.0.1:6379> expire test-key 3 (3초 뒤 만료) (integer) 1 127.0.0.1:6379> get test-key (3초 전) "exiretest" 127.0.0.1:6379> get test-key (3초 후) (nil) [ 예제2 ] 127.0.0.1:6379> set test-key testValue ex 20 ( 키값을 지정하면서 만료 기간도 지정 ) OK 127.0.0.1:6379> get test-key "testValue" 127.0.0.1:6379> ttl test-key (키의 만료 시간을 체크할 수 있음) (integer) 14 127.0.0.1:6379> get test-key (만료된 키 조회) (nil) 127.0.0.1:6379> ttl test-key (만료된 키의 만료 시간을 조회할 경우 -2 반환) (integer) -2
(2) EXPIREAT : EXPIRE 명령어와 유사하지만, 유효기간(Expiration)을 UNIX 시간(Unix Timestamp) 기준의 절대 시간으로 설정하는 명령어
(3) PERSIST : 특정 키(Key)에 대한 유효기간(Expiration)을 제거하여 영구적으로 데이터를 보관하는 명령어
127.0.0.1:6379> set test-key testValue OK 127.0.0.1:6379> expire test-key 10 (10초 뒤 만료 설정) (integer) 1 127.0.0.1:6379> persist test-key ( 만료 기간을 제거 ) (integer) 1 127.0.0.1:6379> get test-key (10초 전 get 명령) "testValue" 127.0.0.1:6379> get test-key (10초 후 get 명령) "testValue"
(4) PEXPIRE : EXPIRE 명령어와 유사하지만, 유효기간(Expiration)을 밀리초 단위로 설정하는 명령어
(5) PEXPIREAT : EXPIREAT 명령어와 유사하지만, 유효기간(Expiration)을 UNIX 시간(Unix Timestamp)과 밀리초(millisecond) 단위로 설정하는 명령어
Lists
- 레디스의 리스트는 링크드 리스트로 구성되어 있다.
- Linked List는 각 노드가 다음 노드를 참조하는 방식으로 구현되기 때문에, 중간에 삽입, 삭제 작업이 필요한 경우 다른 자료구조에 비해 빠르게 수행한다.
- 인덱스로 바로 접근할 수 없기 때문에 요소에 접근할 때는 선형 탐색을 수행해야 한다.
- 배열 양 끝단에 액세스하는 목록 작업은 O(1)이므로 매우 효율적
- 그러나 목록 내의 요소를 조작하는 명령은 일반적으로 O(n)
배열 명령어
LPUSH : List의 맨 앞에 값을 추가합니다.
127.0.0.1:6379> lpush testlist a b c (integer) 3 127.0.0.1:6379> lrange testlist 0 -1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379>
푸쉬 과정
- a를 testlist 배열의 맨 앞에 추가합니다. testlist : [ a ]
- b를 testlist 배열의 맨 앞에 추가합니다. testlist : [ b, a ]
- c를 testlist 배열의 맨 앞에 추가합니다. testlist : [ c, b, a ]
RPUSH : List의 맨 뒤에 값을 추가합니다.
127.0.0.1:6379> rpush testlist a b c (integer) 3 127.0.0.1:6379> lrange 0 -1 (error) ERR wrong number of arguments for 'lrange' command 127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c"
푸쉬 과정
- a를 testlist 배열의 맨 뒤에 추가합니다. testlist : [ a ]
- b를 testlist 배열의 맨 뒤에 추가합니다. testlist : [ a, b]
- c를 testlist 배열의 맨 뒤에 추가합니다. testlist : [ a, b, c ]
LPOP : List의 맨 앞에서 값을 제거하고 반환합니다.
127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> lpop testlist 1 1) "a" 127.0.0.1:6379> lrange testlist 0 -1 1) "b" 2) "c"
- testlist의 초기값 : [a, b, c]
- lpop 명령으로 배열의 맨 앞 요소를 제거 후 반환 -> a
- 다시 배열을 확인하면 맨 앞에 존재하던 a가 제거된것을 확인할 수 있다. testlist : [b, c]
RPOP : List의 맨 뒤에서 값을 제거하고 반환합니다.
127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> rpop testlist 1 1) "c" 127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b"
- testlist의 초기값 : [a, b, c]
- lpop 명령으로 배열의 맨 뒤 요소를 제거 후 반환 -> c
- 다시 배열을 확인하면 맨 뒤에 존재하던 c가 제거된것을 확인할 수 있다. testlist : [a, b]
LRANGE : 지정된 인덱스 범위(start와 end) 내의 모든 요소를 가져옵니다.
127.0.0.1:6379> lrange testlist 0 0 1) "a" 127.0.0.1:6379> lrange testlist 0 1 1) "a" 2) "b" 127.0.0.1:6379> lrange testlist 0 2 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> lrange testlist 0 3 1) "a" 2) "b" 3) "c" 4) "d" 127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f"
- 배열의 요소를 확인할 수 있습니다.
- lrange 문법 : lrange key start end
- 예제 코드에서 0은 시작 인덱스를 의미하고 -1은 마지막 인덱스를 의미합니다.
LINDEX : 지정된 인덱스(index)에 해당하는 요소를 가져옵니다.
127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 127.0.0.1:6379> lindex testlist -1 "f" 127.0.0.1:6379> lindex testlist 2 "c" 127.0.0.1:6379> lindex testlist 0 "a"
- lindex문법 : lindex key index
- 배열 인덱스에 해당하는 값을 리턴합니다.
LLEN : List에 저장된 요소의 수를 반환합니다.
127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 127.0.0.1:6379> llen testlist (integer) 6
- 배열의 길이를 리턴합니다.
LTRIM : List의 특정 범위 내의 요소들을 남기고 나머지 요소들을 삭제
127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 127.0.0.1:6379> ltrim testlist 0 2 OK 127.0.0.1:6379> lrange testlist 0 -1 1) "a" 2) "b" 3) "c"
- testlist에서 [0, 1, 2]번째 인덱스를 제외한 모든 인덱스를 제거한다.
LMOVE : List에서 특정 값을 다른 List로 이동시키는 명령어입니다. 다음과 같은 형식으로 사용됩니다.
redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> LMOVE mylist myotherlist RIGHT LEFT "three" redis> LMOVE mylist myotherlist LEFT RIGHT "one" redis> LRANGE mylist 0 -1 1) "two" redis> LRANGE myotherlist 0 -1 1) "three" 2) "one"
- LMOVE 문법 : lmove 원본키 타겟키 [LEFT | RIGHT] [LEFT | RIGHT]
- 문법의 첫벗째 [LEFT | RIGHT]의 LEFT는 배열의 첫 요소를 RIGHT는 마지막 요소를 타겟으로 지정
- 문법의 두번째 [LEFT | RIGHT]의 LEFT는 타겟 배열의 첫번째 인덱스에 RIGHT는 마지막 인덱스에 push한다는 의미
BLPOP
- 문법 : BLPOP key [key ...] timeout
- key: 데이터를 가져올 List의 이름
- timeout: 블로킹할 시간을 지정합니다. 0일 경우 무한 대기
- BLPOP 명령어는 여러 개의 List에서 블로킹하며 데이터를 가져올 수 있다. List에 데이터가 존재하지 않는 경우, timeout 시간 동안 블로킹한다. 데이터가 존재하는 List가 여러 개인 경우, 가장 먼저 데이터가 존재하는 List에서 데이터를 가져온다.
- BLPOP 명령어는 대기열(Queue)의 구현에 주로 사용된다. 예를 들어, 여러 클라이언트에서 대기열에 데이터를 추가하고, 다른 클라이언트에서 이 데이터를 가져가야 할 경우에 BLPOP 명령어를 사용할 수 있다.
BLMOVE
- 문법 : BLMOVE source destination TIMEOUT [DESTINATION-TIMEOUT]
- source: 데이터를 가져올 List의 이름
- destination: 데이터를 이동시킬 List의 이름
- TIMEOUT: 블로킹할 시간을 지정
- DESTINATION-TIMEOUT: destination List에서 블로킹할 시간을 지정
- BLMOVE 명령어는 BLPOP 명령어와 유사하지만, 가져온 데이터를 다른 List로 이동시키는 것이 가능하다. 이 때, 이동시키려는 destination List가 존재하지 않으면, 새로 생성한다. TIMEOUT 인자는 source List에서 블로킹할 시간을, DESTINATION-TIMEOUT 인자는 destination List에서 블로킹할 시간을 지정
- BLMOVE 명령어는 여러 개의 List에서 데이터를 블로킹하며 가져올 때 유용하다. 예를 들어, 대기열에서 데이터를 가져와서 처리하는 경우, 처리 중 문제가 발생하여 해당 데이터를 다른 List로 이동시켜야 할 경우에 BLMOVE 명령어를 사용할 수 있다.
Hashes
- key-value 쌍의 데이터를 저장하는 자료구조
- 하나의 key에 대해 여러 개의 field와 value를 저장할 수 있으며, 이를 통해 하나의 key로 여러 가지 정보를 관리할 수 있다.
- Hashes 데이터 타입은 복잡한 데이터 구조를 관리할 때 유용하며, Redis에서는 다양한 명령어를 지원하여 효율적인 데이터 관리가 가능하다.
- 대부분의 Redis 해시 명령은 O(1)
- HKEYS, HVALS, HGETALL 같은 몇 가지 명령은 O(n)이며 여기서 n 은 필드-값 쌍의 수
- 특징
- 하나의 키에 대해 여러 개의 필드와 값 저장 가능: 하나의 키(Key)에 대해 여러 개의 필드(Field)와 값(Value)을 저장할 수 있다. 이를 통해 하나의 키로 여러 가지 정보를 관리할 수 있다.
- 중첩된 해시 구조 지원: 하나의 필드 값으로 또 다른 해시 구조를 저장할 수 있다. 이를 통해 복잡한 데이터 구조를 구현할 수 있다.
- 성능이 우수: 해시 데이터 타입은 하나의 키에 대해 여러 필드와 값을 저장할 수 있으므로, 여러 개의 문자열 데이터 타입을 사용하는 것보다 더욱 성능이 우수하다.
해쉬 명령어
HSET : 하나 이상의 필드와 값을 설정한다.
HGET : 하나의 필드 값을 반환한다.
127.0.0.1:6379> hset myhesh name "tscalm" age 30 (integer) 2 127.0.0.1:6379> hget myhesh name "tscalm" 127.0.0.1:6379> hget myhesh age "30"
HMGET : 하나 이상의 필드 값을 반환한다.
127.0.0.1:6379> hset myhesh name "tscalm" age 30 (integer) 2 127.0.0.1:6379> hmget myhesh name age 1) "tscalm" 2) "30" 127.0.0.1:6379> hmget myhesh name 1) "tscalm"
HGETALL : 모든 필드와 값을 조회한다.
127.0.0.1:6379> hset myhesh name "tscalm" age 30 (integer) 2 127.0.0.1:6379> hgetall myhesh 1) "name" 2) "tscalm" 3) "age" 4) "30"
HINCRBY : 하나의 필드의 값을 증가 | 감소 작업을 수행한다.
127.0.0.1:6379> hget myhesh age "30" 127.0.0.1:6379> hincrby myhesh age 1 (integer) 31 127.0.0.1:6379> hget myhesh age "31" 127.0.0.1:6379> hincrby myhesh age -1 (integer) 30 127.0.0.1:6379> hget myhesh age "30"
Sets
- 중복을 허용하지 않음: Set에는 중복된 값을 저장할 수 없다. 이미 존재하는 값은 추가될 수 없으며, 추가하려는 값이 Set에 이미 존재하는지 여부를 확인하기 위해 O(1)의 시간 복잡도를 갖는 메서드를 사용한다.
- 순서가 없음: Set에 저장되는 값은 순서가 없이 저장된다. 따라서 값의 위치나 인덱스를 통해 접근할 수 없다.
- 집합 연산 지원: 여러 Set 간에 교집합, 합집합, 차집합 등의 연산을 지원한다.
set 명령어
SADD: Set에 하나 이상의 값을 추가합니다.
SMEMBERS: Set에 저장된 모든 값을 반환합니다.
SISMEMBER: 지정된 값이 Set에 존재하는지 여부를 확인합니다.
127.0.0.1:6379> sadd myset 1 2 3 4 5 (integer) 5 127.0.0.1:6379> smembers myset 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> sismember myset 1 (integer) 1 127.0.0.1:6379> sismember myset 2 (integer) 1 127.0.0.1:6379> sismember myset 6 (integer) 0
SINTER: 여러 Set의 교집합을 반환합니다.
127.0.0.1:6379> sadd myset 1 2 3 4 5 (integer) 5 127.0.0.1:6379> sadd yourset 3 4 5 6 7 (integer) 5 127.0.0.1:6379> sinter myset yourset 1) "3" 2) "4" 3) "5"
- myset : [1, 2, 3, 4, 5], yourset : [3, 4, 5, 6, 7]
- sinter 명령을 통해 myset과 yourset의 교집합이 3,4,5 라는것을 알 수 있다.
SUNION: 여러 Set의 합집합을 반환합니다.
127.0.0.1:6379> sadd myset 1 2 3 4 5 (integer) 5 127.0.0.1:6379> sadd yourset 3 4 5 6 7 (integer) 5 127.0.0.1:6379> sunion myset yourset 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7"
- myset : [1, 2, 3, 4, 5], yourset : [3, 4, 5, 6, 7]
- sinter 명령을 통해 myset과 yourset의 합집합이 1,2,3,4,5,6,7 라는것을 알 수 있다.
SDIFF: 여러 Set의 차집합을 반환합니다.
127.0.0.1:6379> sadd myset 1 2 3 4 5 (integer) 5 127.0.0.1:6379> sadd yourset 3 4 5 6 7 (integer) 5 127.0.0.1:6379> sdiff myset yourset 1) "1" 2) "2" 127.0.0.1:6379> sdiff yourset myset 1) "6" 2) "7"
- myset : [1, 2, 3, 4, 5], yourset : [3, 4, 5, 6, 7]
- sdiff A B : A -B 의 결과를 반환
SUNIONSTORE: 여러개의 set을 합친 하나의 셋을 만들 수 있다. 이미 존재하는 키의 경우 덮어씌운다.
redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SUNIONSTORE key key1 key2 (integer) 5 redis> SMEMBERS key 1) "c" 2) "a" 3) "d" 4) "b" 5) "e"
SPOP: 저장된 set의 값을 랜덤으로 제거 및 반환합니다.
redis> SADD myset "one" (integer) 1 redis> SADD myset "two" (integer) 1 redis> SADD myset "three" (integer) 1 redis> SPOP myset "one" redis> SMEMBERS myset 1) "three" 2) "two" redis> SADD myset "four" (integer) 1 redis> SADD myset "five" (integer) 1 redis> SPOP myset 3 1) "five" 2) "four" 3) "two" redis> SMEMBERS myset 1) "three"
SCARD: set의 카디널리티(set의 멤버 수) 수를 반환한다.
redis> SADD myset "Hello" (integer) 1 redis> SADD myset "World" (integer) 1 redis> SCARD myset (integer) 2
SRANDMEMBER key [count]
- set의 임의의 값을 반환합니다.
- count의 디폴트값은 1
- count > set 집합의 길이인 경우 : set 집합의 모든 요소를 랜덤하게 반환
- set 집합의 길이 > count인 경우 : set 집합의 요소를 count만큼 랜덤하게 반환
- count < 0 인 경우 : count의 절대값만큼 set 집합의 요소를 랜덤하게 반환하며 중복값을 허용한다.
127.0.0.1:6379> scard myset (integer) 5 127.0.0.1:6379> srandmember myset 4 1) "4" 2) "1" 3) "5" 4) "2" 127.0.0.1:6379> srandmember myset 10 1) "1" 2) "2" 3) "3" 4) "4" 5) "5"
Sorted Sets
Redis의 Sorted Set 데이터 타입은 Set과 비슷하지만, 각 요소마다 score값이 지정되어 있어 정렬된 상태로 저장되는 자료구조이다.
- 유일한 값만 저장 가능: Set과 마찬가지로, Sorted Set도 중복된 값은 허용하지 않습니다.
- 각 요소마다 score가 지정됨: 각 요소는 유일한 값을 가지며, 각 요소마다 score 값을 가지고 있습니다. score는 다른 요소와 비교할 때 사용되며, 값이 작을수록 우선순위가 높습니다.
- 정렬된 상태로 저장: Sorted Set은 score 값에 따라 요소가 정렬된 상태로 저장됩니다. 따라서 값 검색이나 범위 내의 값들을 조회하는 작업이 빠릅니다.
- score가 같을 경우 사전순으로 정렬된다.
- score 값에 따라 요소를 정렬하므로, 값을 검색하거나 범위 내의 값들을 조회하는 작업이 빠르다.
sorted set 명령어
ZADD: Sorted Set에 하나 이상의 값을 추가
ZRANGE: 지정된 범위 내의 값을 반환
ZREVRANGE: 지정된 범위 내의 값을 score 값의 역순으로 반환
ZRANK: 요소의 순위를 반환
ZSCORE: 요소의 score 값을 반환
127.0.0.1:6379> zadd testsset 0 "one" 1 "two" 2 "three" (integer) 3 127.0.0.1:6379> zrange testsset 0 -1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> zrevrange testsset 0 -1 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> zrank testsset "one" (integer) 0 127.0.0.1:6379> zrank testsset "three" (integer) 2 127.0.0.1:6379> zscore testsset "one" "0" 127.0.0.1:6379> zscore testsset "three" "2"
Sorted Set 데이터 타입은 값의 순서를 중요하게 여기는 경우에 사용되며, Redis에서는 Sorted Set에 대한 다양한 연산을 지원하여 빠르고 간편하게 처리할 수 있습니다. 예를 들어, Sorted Set을 이용하여 높은 점수 순으로 랭킹을 매길 수 있습니다.
Bitmaps
Redis의 Bitmaps는 비트 단위로 값을 저장하는 데이터 타입입니다. 각 비트는 0 또는 1의 값을 가지며, 큰 양의 데이터를 작은 크기로 표현할 수 있어 저장 용량을 절약할 수 있다.
'공부하기 > 데이터베이스' 카테고리의 다른 글
Mac m1 Redis 설치 기록 (0) 2023.03.03 MySql 오브젝트 스캔 유형 (0) 2023.02.28 [용어] MySql 드라이빙 테이블, 드리븐 테이블 (0) 2023.02.28 mysql 쿼리 실행 절차 (0) 2023.02.19 MySql Isolation Level(격리수준) (0) 2023.02.19