뭐라도 끄적이는 BLOG

Redis 소개 및 데이터 타입 본문

DataBase/Redis

Redis 소개 및 데이터 타입

Drawhale 2023. 7. 23. 17:20

Redis (Remote Dictionary Server)

Redis는 아래 3가지 용도로 주로 사용된다.

  • Storage: 데이터 저장소의 역할을 한다.
  • Database: DBMS의 역할을 수행할 수도 있다.
  • Middleware: 어플리케이션이 이용할 수 잇는 유용한 기능을 제공한다.

In Memory DB이기 때문에 빠르게 데이터를 저장및 읽을 수 있다. 하지만 휘발성이기 때문에 중요한 데이터를 저장하기 보단 Session과 같은 단기적인 데이터 또는 Cache로 사용하여 빠르게 데이터를 불러오는데 사용한다. 어느정도 영속성도 확보할 수 있긴 하지만 절대적인 무결성을 위해서는 데이터베이스를 이용하는 것이 맞다.

Redis는 Key-Value 저장서로 List, Hash, Set, 정렬된 Set등 여러 형식의 자료구조를 지원하는 NoSQL이다. Redis같은 유연한 자료구조를 가지는 In Memory Key-Value 솔루션을 사용하여 DB부하를 분산시키는 데 적용을 하는 경우가 많다.

DataType

String 

명령어 기능 예제
SET 특정 키에 문자열 값을 저장 SET say hello
GET 특정 키의 문자열 값을 가지고 온다. GET say
INCR 특정 키의 값을 Integer로 취급하여 1 증가 INCR count
DECR 특정 키의 값을 Integer로 취급하여 1 감소 DECR count
MSET 여러 키에 대한 값을 한번에 저장 MSET key1 value1 key2 value2
MGET 키에 대한 값을 한번에 가지고 온다. MGET key1 key2

List

Linked-list 형태의 자료구조이다. Queue와 Stack으로 사용할 수 있다.

명령어 기능 예제
LPUSH 리스트의 왼쪽에 새로운 값을 추가 LPUTH list apple
RPUSH 리스트의 오른쪽에 새로운 값을 추가 RPUSH list banana
LLEN 리스트에 들어있는 아이템 개수를 반환 LLEN list
LRANGE 특정 범위를 반환 LRANGE list 0 -1
LPOP 리스트의 왼쪽에서 값을 삭제하고 반환 LPOP list
RPOP 리스트의 오른쪽에서 값을 삭제하고 반환 RPOP list

LRANGE 에서 범위는 0띄우고 -1으로 표현되는 점만 주의하면 된다.

Set

순서가 없는 유니크한 값. 검색이 빠르다. 수학의 집합 개념이다.

명령어   기능 예제
SADD Set에 데이터를 추가 SADD set apple
SREM Set에 데이터를 삭제 SREM set apple
SCARD Set에 저장된 아이템 개수 반환 SCARD set
SMEMBERS Set에 저장된 아이템들 반환 SMEMBERS set
SISMEMBER 특정 값이 Set에 포함되어 있는지 반환 SISMEMBER set apple

Hashes

하나의 key 하위에 여러 field-value 쌍을 저장한다.

명령어   기능 예제
HSET 한개 또는 다수의 필드에 값을 저장 HSET user1 name bear age 10
HGET 특정 필드의 값을 반환 HGET user1 name
HMGET 한개 이상의 필드 값을 반환 HMGET user1 name age
HINCRBY 특정 필드의 값을 Integer로 취급하여 지정한 숫자를 증가 HINCRBY user1 viewcount 1
HDEL 한개 이상의 필드를 삭제 HDEL user1 name age

Sorted Set

Set과 유사하게 유니크한 값의 집합이다. 각 값은 연관된 score를 가지고 정렬된다. 정렬된 상태이기에 빠르게 최소/최대값을 구할 수 있다. 순위 계산, 리더보드 구현등에 사용할 수 있다.

명령어 기능 예제
ZADD 한개 또는 다수의 값을 추가 또는 업데이트 ZADD rank 10 apple 20 banana
ZRANGE 특정 범위의 값을 반환 (오름차순 기준) ZRANGE rank 0 1
ZRANK 특정 값의 위치(순위)를 반환(오름차순 기준) ZRANK rank apple
ZREVRANK 특정 값의 위치(순위)를 반환(내림차순 기준) ZREVRANK rank apple
ZREM 한개 이상의 값을 삭제 ZREM rank apple

Bitmaps

비트 벡터를 사용해 N개의 Set을 공간 효율적으로 저장한다. 하나의 비트맵이 가지는 공간은 4294967295로 효율적으로 저장할 수 있다. 각 비트를 논리 연산으로 사용해 볼 수 있다.

명령어 기능 예제
SETBIT 비트맵의 특정 오프셋에 값을 변경 SETBIT visit 10 1
GETBIT 비트맵의 특정 오프셋의 값을 반환 GETBIT visit 10
BITCOUNT 비트맵에서 set(1) 상태인 비트의 개수를 반환 BITCOUNT visit
BITOP 비트맵들간의 비트 연산을 수행하고 결과를 비트맵에 저장 BITOP AND result today yesterday

각 비트의 초기 값은 0으로 아무런 설정을 하지 않았을때 GETBIT로 불러오면 0이 반환된다.

127.0.0.1:6379> setbit today_visit 2 1
(integer) 0
127.0.0.1:6379> setbit today_visit 3 1
(integer) 0
127.0.0.1:6379> setbit today_visit 4 1
(integer) 0
127.0.0.1:6379> bitcount today_visit
(integer) 3
127.0.0.1:6379> setbit yesterday_visit 3 1
(integer) 0
127.0.0.1:6379> setbit yesterday_visit 2 1
(integer) 0
127.0.0.1:6379> bitop and result yesterday_visit today_visit
(integer) 1
127.0.0.1:6379> bitcount result
(integer) 2

위는 사용 예시이다. BITOP으로 나온 결과물 result는 yesterday_visit의 3,2와 today_visit 3,2가 and 연산으로 나온 결과물이다.

HyperLogLog

유니크한 값의 개수를 효율적으로 얻을 수 있다. 확률적 자료구조로 오차가 있고 매우 큰데이터를 다룰 때 사용한다. 2^64개의 유니크 값을 계산할 수 있다. 저렇게 큰 값을 계산할 수 있는데 단 12KB까지 메모리를 사용하며 0.81%의 오차율을 허용한다.

대규모 데이터의 경우 100%정확한 값을 받아오는 것보다 99%정도의 값만으로도 처리하는데 충분한 경우가 있기 때문에 사용한다.

명령어 기능 예제
PFADD HyperLogLog에 값들을 추가 PFADD visit Jay Peter Jane
PFCOUNT HyperLogLog에 입력된 값들의 cardinality(유일값의 수)를 반환 PFCOUNT visit
PFMERGE 다수의 HyperLogLog를 병합 PFMERGE result visit1 visit2

이 외에도 Streams, geospatial, Bitfields 데이터 타입이 있다.

모든 키 검색과 삭제

위 데이터 타입들을 테스트 해보고 모든 키를 검색과 삭제하고 싶다면 아래 두가지 커맨드로 해결할 수 있다.

keys *
flushall

참고자료

 

 

Redis data types

Overview of data types supported by Redis

redis.io

반응형

'DataBase > Redis' 카테고리의 다른 글

Spring Boot에서 Redis 사용하기  (0) 2023.07.24