[General] Redis KEYS vs SCAN #121
Hszoo
started this conversation in
3. 성주님의 DEV-LOG
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
KEYS
다들 흔히 알고 계실 레디스의
KEYS명령어로 Key를 조회할 수 있습니다.해당 명령어가 실행될때의 시간 복잡도는 O(N)이지만 공식 문서상에서는 저사양 랩탑에서도 40ms 내 100만개의 key가 존재하는 데이터베이스를 스캔할 수 있다고 합니다.
🚨 KEYS의 문제점
Redis는 싱글 스레드 아키텍처입니다.
따라서, KEYS명령어를 실행하는 도중 다른 모든 명령어 실행은 블로킹됩니다.
특히 데이터베이스 규모가 커질 수록 블로킹의 영향이 전체적인 성능을 저하시킬 수 있으므로, 이 명령어는 일반적인 프로덕션 환경에서는 절대 사용하지 말아야 한다고 합니다.
SCAN
SCAN은 다른 명령어 실행을 거의 블로킹하지 않으므로 KEYS에 비해 비교적 안전한 조회가 가능합니다.
SCAN의 동작 원리는 작은 단위로 반복 순회하며 데이터베이스를 스캔합니다.
한 번의 명령 호출 당 적은 수의 요소만 반환하므로, 중간중간 다른 명령어도 함께 처리할 수 있습니다.
SCAN 사용시에는 필수 인수로 다음 index를 의미하는 CURSOR가 사용되며,
다음 순회의 시작점이 될 CURSOR를 반환합니다. (CURSOR=0 : 모든 collection 순회)
저희 프로젝트 코드로 예를 들자면,
🔻 MatchScoreCacheRepository 일부 🔻
Redis Key 조회 방식 정리
🧩 참고
Velog - Redis KEYS vs SCAN
Kakao Tech - SCAN 내부 동작 설명
Beta Was this translation helpful? Give feedback.
All reactions