피드로 돌아가기
Redis: Big Keys Destroem o Desempenho Compartilhado
Dev.toDev.to
Database

Single-threaded Event Loop 기반 Redis의 Big Key 제거를 통한 공유 환경 Latency 최적화

Redis: Big Keys Destroem o Desempenho Compartilhado

Lincoln Zocateli2026년 5월 25일17intermediate

Context

다중 마이크로서비스 및 테넌트가 공유하는 Redis 인스턴스에서 단일 Big Key 처리가 전체 시스템의 병목으로 작용함. Redis의 Single-threaded 데이터 처리 구조로 인해 거대 키 연산 시 Event Loop가 점유되어 타 서비스의 요청까지 모두 블로킹되는 구조적 한계가 존재함.

Technical Solution

  • O(N) 복잡도를 갖는 LRANGE, SMEMBERS, HGETALL 등 블로킹 명령어를 지양하고 SCAN 기반의 비동기 탐색 구조로 전환
  • 거대 Hash 구조를 다수의 작은 키로 분산하는 Sharding 기법을 적용하여 단일 키 처리 시간을 단축하고 병렬성 확보
  • 모든 키에 TTL 설정을 강제하여 데이터 무한 증식으로 인한 Big Key 생성 가능성을 원천적으로 차단
  • maxmemory-policy를 allkeys-lru로 설정하여 메모리 임계치 도달 시 효율적인 Eviction 메커니즘 구축
  • Redis 7.0+의 Listpack 도입 등 내부 데이터 구조 최적화 버전을 활용하여 메모리 효율성 제고

- 운영 환경에서 SCAN 명령어를 통해 주기적으로 Big Key 존재 여부를 전수 조사하고 있는가? - 공유 Redis 인스턴스 내 모든 키에 적절한 TTL이 설정되어 데이터 생명주기가 관리되고 있는가? - O(N) 복잡도 명령어를 서비스 코드에서 사용 중이며, 데이터 증가 시 Event Loop 블로킹 위험이 없는가? - 거대 데이터 구조를 다수의 Shard 키로 분할하여 읽기/쓰기 부하를 분산했는가?

원문 읽기