Redis Key, Scan 명령어

2024. 5. 7. 21:58·Spring/대용량 트래픽

2024.05.07 - [Spring/대용량 트래픽] - Redis Transactions

 

Redis Transactions

2024.05.03 - [Spring/대용량 트래픽] - Java에서 Redis 명령어 Java에서 Redis 명령어2024.04.30 - [Spring/대용량 트래픽] - Redis 다양한 데이터 타입 알아보기 Redis 다양한 데이터 타입 알아보기2024.04.05 - [Spring/

lsdiary.tistory.com

 

이전 글은 Redis에서 트랜잭션에 대해 알아봤다.

명령어를 이야기 하기 전에 우선 Redis는 Single thread로 동작한다(순차 처리).

빠른 응답속도로 처리되는 in-memory의 장점이 사라진다. 그래서 장점을 살리기 위해서 대부분의 Redis 명령어는 시간복잡도 O(1)에 끝나지만 O(n) 의 시간복잡도를 가진 명령어의 경우 사용하는데 주의가 필요하다.

오늘 다루고자하는 Key와 Scan이 이에 해당한다.


KEYS 명령어

 

레디스에 저장된 KEY를 모두 조회한다. ( + 특정패턴으로도 조회 가능)

Value관점에서 유사 명령어 (O(n)시간복잡도를가진)

 

  • LINSERT(List)
  • HKEYS, HGETALL(Hash)
  • SMEMBERS(Set)

이런 명령어들은 데이터가 100만, 1000만 . . . 이런식으로 늘어나게 된다면 서비스에 막대한 장애를 가져올 수있다.

이 역시 해결책이 있다!

Keys -> Scan 명령어로 대체하면 해결할 수 있다.

차이점은 특정 개수의 Key를 가져 올수 있다는 점이다. 또한 Cursor가 응답값에 포함되어있어서, 다음 명령때 Cursor를 포함시키고 가져올 개수를 입력하면 이어서 Key를 조회할 수 있다.

 

  • 실습
docker exec -it [containerID] /bin/bash

우선 bash에서 실행시켰다.

0부터 9999999까지 for문을 돌면서 echo 명령어를 통해 key를 txt파일에 저장하는 문장을 실행했다.

이 데이터에 대해서 대용량 데이터 처리에 특화된 명령어를 쓸수있다.

이제부터는 redis-cli 명령어를 통해서 확인한다.

cat redis-string.txt | redis-cli --pipe

 

이 명령을 내리고 다른 터미널에서 

docker exec -it [containerID] redis-cli --latency

이 명령어를 통해 명령어가 처리되는 값에 대해서 볼수있다.

실질적으로 굉장히 빠른 처리

redis-cli
KEYS *

대략 3초가 걸리도록 변경

SCAN 0 MATCH * COUNT 100

SCAN명령어를 KEYS대신 사용하여 엄청 빠른 조회가 가능하다.

1) 커서값

커서값또한 리턴한다. 다음 값들을 조회하고 싶으면 위에 넣었던 0대신 커서값을 넣어주면 된다.

** 참고 : 정확히 내가 설정한 개수를 조회하는 것이 아니라, 내부적으로 상황에 맞게 조회하는 개수가 조금씩 달라질 수도있다.


O(n) 시간복잡도를 가지는 명령어들을 살펴봤다.

데이터 개수가 정말 많아진다면 성능에 심각한 영향을 미칠 수 있기때문에, 되도록이면 SCAN 명령어를 활용해서 전체데이터를 탐색하는 것보단 꼭 필요한 데이터만 탐색하도록 하자!

2024.05.07 - [Spring/대용량 트래픽] - Redis Cache 이론

 

Redis Cache 이론

2024.05.07 - [Spring/대용량 트래픽] - Redis Key, Scan 명령어 Redis Key, Scan 명령어2024.05.07 - [Spring/대용량 트래픽] - Redis Transactions Redis Transactions2024.05.03 - [Spring/대용량 트래픽] - Java에서 Redis 명령어 Java

lsdiary.tistory.com

 

'Spring > 대용량 트래픽' 카테고리의 다른 글

Redis Cache로 실습하기  (0) 2024.05.08
Redis Cache 이론  (0) 2024.05.07
Redis Transactions  (0) 2024.05.07
Java에서 Redis 명령어  (0) 2024.05.03
Redis 다양한 데이터 타입 알아보기  (0) 2024.04.30
'Spring/대용량 트래픽' 카테고리의 다른 글
  • Redis Cache로 실습하기
  • Redis Cache 이론
  • Redis Transactions
  • Java에서 Redis 명령어
Ls._.Rain
Ls._.Rain
안되면 될때까지 삽질했던 기록
  • Ls._.Rain
    Ls{Diary}
    Ls._.Rain
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Github (2)
      • Spring (51)
        • Batch Programming (13)
        • 결제 (4)
        • 대용량 트래픽 (32)
        • OpenAI (0)
        • Security (0)
        • WebSocket (0)
        • JPA (1)
      • Algorithm (67)
        • DFS (6)
        • BFS (6)
        • Dynamic Programming (10)
        • Brute Force (4)
        • Binary Search (6)
        • 구현, 시뮬레이션 (15)
        • Stack (1)
        • Greedy (4)
        • Priority_Queue (2)
        • Back Tracking (3)
        • Geometry (2)
        • SCC (1)
        • 투포인터 (4)
        • 최대유량 (1)
        • 정렬 (1)
      • OS (0)
      • DevOps (15)
        • AWS (11)
        • Docker (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • hELLO· Designed By정상우.v4.10.0
Ls._.Rain
Redis Key, Scan 명령어
상단으로

티스토리툴바