이전 글 Redis의 String형식에 이어서 이번에는 List와 Set형식에 대해 알아보고 실습해보겠습니다.
Redis의 LIST 실습
1. Lists 특징
- 지정한 Key에 리스트를 저장할 수 있습니다.
- 왼쪽(Left)이 Head, 오른쪽(Right)이 Tail입니다.
- 리스트에 들어갈 수 있는 최대 갯수는 2^32 - 1 (4,294,967,295)개 입니다.
- Stack, Queue 등을 구현하는데 사용합니다.
2. Comands
- LPUSH 새 원소를 Head에 추가한다.
- RPUSH 새 원소를 Tail에 추가한다.
- LPOP Head의 원소를 지우고 리턴한다.
- RPOP Tail의 원소를 지우고 리턴한다.
- LRANGE 특정 길이, 개수 만큼 원소를 리턴한다. (ex. 리스트의 처음부터 마지막 까지의 원소를 반환 - LRANGE mylist 0 -1)
- LLEN 리스트의 길이를 리턴한다.
- LREM 특정 원소를 찾아서 지운다.
- LMOVE atomic하게 한 리스트의 원소들을 다른 리스트로 옮긴다.
- Reliable Queue를 구현하는데 사용할 수 있다. (LMOVE, LREM 이용)
- Que 2개 job / processing
- job에서 LMOVE로 작업할 원소를 processing que로 이동
- processing que에 있는 작업이 실패 시 processing que에 남음 / 성공 시 processing que원소 삭제 (LREM 사용)
- Circular List를 만들 수 있다. (source, destination을 같은 리스트로)
- Reliable Queue를 구현하는데 사용할 수 있다. (LMOVE, LREM 이용)
- LTRIM 지정한 range 만큼의 원소들을 남기고 나머지를 지운다.
- -1 은 마지막 원소를 뜻한다.
- 주의: 지우는 대상이 많을 수록 시간이 오래걸린다. O(N)
- BLPOP
- LPOP과 같다. 만약 리스트가 비어있다면 새로운 원소가 들어올 때까지 기다린다. (blocking) 단, timeout발생 이전까지 기다린다.
- BLMOVE
- LMOVE와 같다. source의 리스트가 비어있다면 새로운 원소가 들어올 때까지 기다린다.
3. 실습
- Head에 원소 삽입
LPUSH mylist value
- Tail에 원소 삽입
RPUSH mylist value
- Head / Tail 원소 제거
LPOP mylist
RPOP mylist
- 리스트원소를 다른 리스트에 옮기기 (왼쪽에 있는 원소를 다른 리스트의 왼쪽에 삽입)
LMOVE mylist tolist LEFT LEFT
- 특정 원소만 남기고 지우기 (왼쪽 5개의 원소만 남기고 모두 지우기)
LTRIM templist 0 4
Redis의 Set 실습
1. Set의 특징
- 정렬되지 않은 unique string데이터(member)에 대한 집합을 저장할 때 씁니다.
- 대부분 command의 시간복잡도가 O(1)이지만, 그렇지 않은 command의 경우 주의해서 사용해야합니다.
- 하나의 Set에 들어갈 수 있는 member의 사이즈는 최대 2^32-1 (4,294,967,295)입니다.
- 10만개 이하로 관리하는 것이 defacto guide입니다.
- 유일한 원소를 저장/조회할 때 씁니다.
- 관계를 표현할 때 씁니다.
- 교집합, 합집합, 차집합 등의 operation을 하고 싶을 때 씁니다.
2. Commands
- SADD Set 에 새로운 member를 추가한다.
- SREM Set 에서 특정 member를 삭제한다.
- SMEMBERS Set에 저장된 모든 member를 리턴한다.
- O(N)의 시간복잡도를 가지고, memeber가 많은 경우 레디스에 부하를 주거나 다른 commands를 느리게할 수 있으므로 주해야한다. SMEMBERS보다는 SSCAN을 통해서 부분조회하는 것을 권장한다.
- SISMEMBER 주어진 String이 Set에 존재하는지 확인한다.
- SMEMBERS 와 마찬가지로 O(N)의 시간복잡도를 가진다.
- SINTER 주어진 두 개 이상의 Set에 모두 존재하는 member들을 리턴한다. (교집합)
- worst case O(N*M) - N은 cardinality, M은 비교대상이 되는 Set의 갯수
- SCARD Set의 size(cardinality)를 조회한다.
3. 실습
- Set에 member 추가
- member삭제
- 주어진 String이 Set에 존재하는지 확인
SISMEMBER key1 two
- 교집합
SINTER key1 key2
'Data Engineering > Redis' 카테고리의 다른 글
[Redis] Redis의 자료 형식과 기능(Sorted Set) - 2.3 (1) | 2024.01.04 |
---|---|
[Redis] Redis의 자료 형식과 기능(Key, String, Counter) - 2.1 (0) | 2023.11.07 |
[Redis] CacheDB 이해하기 - 1 (0) | 2023.11.07 |