- Published on
[Redis] Redis Data Types
- Authors
- Name
- 유사공대생
Strings
- 가장 기본적인 데이터 타입으로 제일 많이 사용됨
- 바이트 배열을 저장(binary-safe: 모든 문자를 표시할 수 있음)
- 바이너리로 변환할 수 있는 모든 데이터를 저장 가능(jpg와 같은 파일 등)
- 최대 크기는 512MB
Strings 주요 명령어
명령어 | 기능 | 예제 |
---|---|---|
SET | 특정 키에 문자열을 저장한다. | SET say hello |
GET | 특정 키의 문자열 값을 얻어온다. | GET say |
INCR | 특정 키의 값을 Integer로 취급하여 1 증가시킨다. | INCR mycount |
DECR | 특정 키의 값을 Integer로 취급하여 1 감소시킨다. | DECR mycount |
MSET | 여러 키에 대한 값을 한번에 저장한다. | MSET mine milk yours coffee |
MGET | 여러 키에 대한 값을 한번에 얻어온다. | MGET mine yours |
아래와 같이 적용되게 된다.
# Redis 터미널에서 실행할 명령어
127.0.0.1:6379> SET say hello
OK
127.0.0.1:6379> GET say
"hello"
127.0.0.1:6379> INCR mycount
(integer) 1
127.0.0.1:6379> DECR mycount
(integer) 0
# MSET과 MGET의 경우는 [key] [value] 형식으로 작성하면 된다.
127.0.0.1:6379> MSET mine milk yours coffee
OK
127.0.0.1:6379> MGET mine yours
1) "milk"
2) "coffee"
Lists
- Linked-list 형태의 자료구조(인덱스 접근은 느리지만 데이터 추가/삭제가 빠름)
- Queue와 Stack으로 사용할 수 있음
List 주요 명령어
명령어 | 기능 | 예제 |
---|---|---|
LPUSH | 리스트의 왼쪽(head)에 요소 추가 | LPUSH mylist value1 |
RPUSH | 리스트의 오른쪽(tail)에 요소 추가 | RPUSH mylist value2 |
LPOP | 리스트의 왼쪽(head)에서 요소 제거하고 반환 | LPOP mylist |
RPOP | 리스트의 오른쪽(tail)에서 요소 제거하고 반환 | RPOP mylist |
LLEN | 리스트의 길이를 반환 | LLEN mylist |
LRANGE | 리스트의 범위에 해당하는 요소들 반환 | LRANGE mylist 0 -1 |
LINDEX | 리스트에서 해당 인덱스의 요소 반환 | LINDEX mylist 0 |
LINSERT | 리스트에서 주어진 위치에 요소 삽입 | LINSERT mylist BEFORE value1 value_new |
LREM | 리스트에서 특정 값의 요소 제거 | LREM mylist 2 value2 |
# Redis 터미널에서 실행할 명령어 및 결과
127.0.0.1:6379> LPUSH mylist value1
(integer) 1
127.0.0.1:6379> RPUSH mylist value2
(integer) 2
127.0.0.1:6379> LPOP mylist
"value1"
127.0.0.1:6379> RPOP mylist
"value2"
127.0.0.1:6379> LPUSH mylist value3
(integer) 1
127.0.0.1:6379> LPUSH mylist value4
(integer) 2
127.0.0.1:6379> LLEN mylist
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "value4"
2) "value3"
127.0.0.1:6379> LINDEX mylist 0
"value4"
127.0.0.1:6379> LINSERT mylist BEFORE value3 value_new
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "value4"
2) "value_new"
3) "value3"
127.0.0.1:6379> LREM mylist 1 value_new
(integer) 1
127.0.0.1:6379> LRANGE mylist 0 -1
1) "value4"
2) "value3"
Sets
- 순서가 없는 유니크한 값의 집합
- 검색이 빠름
- 개별 접근을 위한 인덱스가 존재하지 않고, 집합 연산이 가능(교집합, 합집합 등)
주요 명령어
명령어 | 기능 | 예제 |
---|---|---|
SADD | 집합에 멤버 추가 | SADD myset member1 |
SMEMBERS | 집합의 모든 멤버들을 반환 | SMEMBERS myset |
SISMEMBER | 멤버가 집합에 있는지 확인 | SISMEMBER myset member1 |
SCARD | 집합의 멤버 수 반환 | SCARD myset |
SREM | 집합에서 멤버 삭제 | SREM myset member2 |
SUNION | 여러 집합을 합쳐서 반환 | SUNION set1 set2 |
SDIFF | 두 집합의 차집합 반환 | SDIFF set1 set2 |
SINTER | 여러 집합의 교집합 반환 | SINTER set1 set2 |
# Redis 터미널에서 실행할 명령어 및 결과
127.0.0.1:6379> SADD myset member1
(integer) 1
127.0.0.1:6379> SADD myset member2
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "member1"
2) "member2"
127.0.0.1:6379> SISMEMBER myset member1
(integer) 1
127.0.0.1:6379> SCARD myset
(integer) 2
127.0.0.1:6379> SREM myset member2
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "member1"
127.0.0.1:6379> SADD myset2 member2
(integer) 1
127.0.0.1:6379> SUNION myset myset2
1) "member1"
2) "member2"
127.0.0.1:6379> SADD myset3 member1
(integer) 1
127.0.0.1:6379> SINTER myset myset3
1) "member1"
127.0.0.1:6379> SADD myset4 member3
(integer) 1
127.0.0.1:6379> SDIFF myset myset4
1) "member1"
Hashes
- 하나의 key 하위에 여러개의 field-value 쌍을 저장
- 여러 필드를 가진 객체를 저장하는 것으로 생각할 수 있음
- HINCRBY 명령어를 사용해 카운터로 활용 가능
주요 명령어
명령어 | 기능 | 예제 |
---|---|---|
HSET | 해시에 필드와 값 추가 | HSET myhash field1 value1 |
HGET | 해시에서 특정 필드의 값을 가져오기 | HGET myhash field1 |
HGETALL | 해시의 모든 필드와 값을 가져오기 | HGETALL myhash |
HDEL | 해시에서 특정 필드 삭제 | HDEL myhash field1 |
HEXISTS | 해시에 특정 필드가 존재하는지 확인 | HEXISTS myhash field1 |
HKEYS | 해시의 모든 필드 가져오기 | HKEYS myhash |
HVALS | 해시의 모든 값을 가져오기 | HVALS myhash |
HLEN | 해시의 필드 수 반환 | HLEN myhash |
HMSET | 여러 필드와 값을 한번에 설정 | HMSET myhash field1 value1 field2 value2 |
HMGET | 여러 필드의 값을 한번에 가져오기 | HMGET myhash field1 field2 |
HINCRBY | 특정 필드의 값을 Integer로 취급하여 지정한 숫자를 증가시킨다. | HINCRYBY user1 viewcount 1 |
# Redis 터미널에서 실행할 명령어 및 결과
127.0.0.1:6379> HSET myhash field1 value1
(integer) 1
127.0.0.1:6379> HSET myhash field2 value2
(integer) 1
127.0.0.1:6379> HGET myhash field1
"value1"
127.0.0.1:6379> HGETALL myhash
1) "field1"
2) "value1"
3) "field2"
4) "value2"
127.0.0.1:6379> HDEL myhash field2
(integer) 1
127.0.0.1:6379> HEXISTS myhash field2
(integer) 0
127.0.0.1:6379> HKEYS myhash
1) "field1"
127.0.0.1:6379> HVALS myhash
1) "value1"
127.0.0.1:6379> HLEN myhash
(integer) 1
127.0.0.1:6379> HMSET myhash field2 value2 field3 value3
OK
127.0.0.1:6379> HMGET myhash field1 field2
1) "value1"
2) "value2"
SortedSets
- Set과 유사하게 유니크한 값의 집합
- 각 값은 연관된 score를 가지로 정렬되어 있음
- 정렬된 상태이기에 빠르게 최소/최대 값을 구할 수 있음
- 순위 계산, 리더보드 구현 등에 활용
주요 명령어
명령어 | 기능 | 예제 |
---|---|---|
ZADD | 정렬된 집합에 멤버와 점수 추가 | ZADD myset 1 member1 |
ZRANGE | 정렬된 집합에서 범위에 있는 멤버 반환 | ZRANGE myset 0 -1 WITHSCORES |
ZSCORE | 정렬된 집합에서 멤버의 점수 반환 | ZSCORE myset member1 |
ZREM | 정렬된 집합에서 멤버 제거 | ZREM myset member1 |
ZCARD | 정렬된 집합의 멤버 수 반환 | ZCARD myset |
ZCOUNT | 정렬된 집합에서 점수 범위 내 멤버 수 반환 | ZCOUNT myset 0 5 |
ZRANK | 정렬된 집합에서 멤버의 순위 반환 | ZRANK myset member1 |
ZREVRANGE | 정렬된 집합에서 역순 범위에 있는 멤버 반환 | ZREVRANGE myset 0 -1 WITHSCORES |
ZINCRBY | 정렬된 집합에서 멤버의 점수 증가 | ZINCRBY myset 1 member1 |
# Redis 터미널에서 실행할 명령어 및 결과
127.0.0.1:6379> ZADD myset 1 member1
(integer) 1
127.0.0.1:6379> ZADD myset 2 member2
(integer) 1
127.0.0.1:6379> ZRANGE myset 0 -1 WITHSCORES
1) "member1"
2) "1"
3) "member2"
4) "2"
127.0.0.1:6379> ZSCORE myset member1
"1"
127.0.0.1:6379> ZREM myset member2
(integer) 1
127.0.0.1:6379> ZCARD myset
(integer) 1
127.0.0.1:6379> ZCOUNT myset 0 5
(integer) 1
127.0.0.1:6379> ZRANK myset member1
(integer) 0
127.0.0.1:6379> ZREVRANGE myset 0 -1 WITHSCORES
1) "member1"
2) "1"
127.0.0.1:6379> ZINCRBY myset 5 member1
"6"
Bitmaps
- 비트 벡터를 사용해 N개의 Set을 공간 효율적으로 저장
- 하나의 비트맵이 가지는 공간은 4,294,967,295(2^32 -1)
- 비트 연산 가능
주요 명령어
명령어 | 기능 | 예제 |
---|---|---|
SETBIT | 비트맵에서 특정 오프셋의 비트 설정 | SETBIT mybitmap 0 1 |
GETBIT | 비트맵에서 특정 오프셋의 비트 값 반환 | GETBIT mybitmap 0 |
BITCOUNT | 비트맵에서 설정된 비트의 수 반환 | BITCOUNT mybitmap |
BITOP | 비트맵들 간의 비트 연산 | BITOP AND destbitmap mybitmap1 mybitmap2 |
BITPOS | 비트맵에서 첫 번째로 나타나는 비트 위치 반환 | BITPOS mybitmap 1 |
# Redis 터미널에서 실행할 명령어 및 결과
127.0.0.1:6379> SETBIT mybitmap 0 1
(integer) 0
127.0.0.1:6379> GETBIT mybitmap 0
(integer) 1
127.0.0.1:6379> BITCOUNT mybitmap
(integer) 1
127.0.0.1:6379> SETBIT mybitmap2 1 1
(integer) 0
127.0.0.1:6379> BITOP AND destbitmap mybitmap mybitmap2
(integer) 1
127.0.0.1:6379> GETBIT destbitmap 1
(integer) 1
127.0.0.1:6379> BITPOS mybitmap 1
(integer) 0
HyperLogLog
- 유니크한 값의 개수를 효율적으로 얻을 수 있음
- 확률적 자료구조로서 오차가 있으며, 매우 큰 데이터를 다룰 때 사용
- 18,466,744,709,551,616(2^64)개의 유니크한 값을 계산 가능
- 12KB까지 메모리를 사용하며 0.81%의 오차율을 허용
주요 명령어
명령어 | 기능 | 예제 |
---|---|---|
PFADD | HyperLogLog에 하나 이상의 요소 추가 | PFADD myloglog element1 element2 |
PFCOUNT | HyperLogLog의 추정된 카디널리티(요소 수) 반환 | PFCOUNT myloglog |
PFMERGE | 여러 HyperLogLog를 하나로 병합 | PFMERGE destloglog myloglog1 myloglog2 |
Redis 터미널에서 실행할 명령어 및 결과
127.0.0.1:6379> PFADD myloglog element1 element2
(integer) 1
127.0.0.1:6379> PFCOUNT myloglog
(integer) 2
127.0.0.1:6379> PFADD myloglog2 element2 element3
(integer) 1
127.0.0.1:6379> PFMERGE destloglog myloglog myloglog2
OK
127.0.0.1:6379> PFCOUNT destloglog
(integer) 3