<Redis> 0. Redis와 Data Types
by BFine가. Redis 란
a. 무엇인가
- Key-Value DB를 지원하는 인메모리 기반의 오픈소스 데이터 저장소이다.
- 주로 캐시로 많이 사용하고 메세지 브로커나 스트리밍 엔진으로 사용할 수도 있다.
=> 업무에서는 Redis에 데이터가 있으면 가져오고 Miss 발생시에는 DB로부터 가져와서 Redis에 저장하는 방법을 사용하고 있다 (Look-aside)
나. Data Type
a. Strings
- 기본 데이터 타입으로 시퀀셜한 byte를 저장하는 구조이다. (종류로는 단순 텍스트, 직렬화된 객체 등 )
=> Key와 Value는 일대일이다. (기본적으로 하나의 value는 최대 512MB까지만 가능)
- 대부분 캐시로 사용하지만 카운터나 비트 연산으로도 사용할 수 있다.
=> 카운터는 64 비트까지 지원한다.
b. Lists
- 하나의 key에 여러 value를 저장할 수 있는 자료구조이다. (Linked list 형태로 최대 2^32 -1개까지 저장 가능하다.)
=> 주로 Queue, Stack으로 사용한다.
- 유의할 점은 lindex, linsert, lset 같이 List를 순회하는 명령어인 경우 O(N) 을 가지기 때문에 크기가 큰 List 일 경우에는 주의해야한다.
c. Set
- 하나의 key에 유니크한 member(value)들을 저장할 수 있는 자료구조이다. (순서는 보장하지 않는다.)
=> members는 최대 2^32 -1개까지 가능하다.
- 유의할 점은 smembers & sdiff O(N), sinter O(N *M) 을 가지기 때문에 member가 많은 경우에는 주의해야한다.
=> 특히 smembers 대신 sscan을 이용해서 member를 탐색하는 것이 좋다. (수십만개라고 레퍼런스에는 나와있는데 그 이하라도 안쓰는게 좋을 것 같다.)
d. Sorted Set
- 하나의 key에 유니크한 member(value)들을 score를 지정하여 정렬 할 수 있는 자료구조이다.
=> score에 따른 순위 결정이나 Rate Limiter로 활용 할 수 있다. (score가 동일할 경우 사전 순으로 정렬)
- 유의할 점은 zrange O( log(N[멤버수]) + M[범위 개수] )을 가지기 때문에 member가 많은 경우(수만개)에는 주의해야한다.
e. hash
- 하나의 key에 여러 field와 value를 저장할 수 있는 자료구조이다. (최대 2^32 -1개까지 저장 가능하다.)
- 유의할 점은 hmget, hgetall, hkeys, hvals 등은 O(N) 을 가지기 때문에 필드가 많을 경우에는 주의해야한다.
'공부 > Redis' 카테고리의 다른 글
<Redis> 2. 아키텍쳐 (0) | 2022.09.03 |
---|---|
<Redis> 1. 트랜잭션 (0) | 2022.08.16 |
블로그의 정보
57개월 BackEnd
BFine