DBAtlas · 데이터베이스 운영 아틀라스

KEYS 없이 패턴에 맞는 key 찾기 및 안전하게 삭제 (SCAN + UNLINK)

Redis유지보수

명령어

# Cursor-based scan instead of KEYS (call again with the returned cursor until it returns 0):
SCAN 0 MATCH oturum:* COUNT 1000 TYPE string
# Number of keys matching the pattern:
redis-cli -h redis1 -p 6379 --scan --pattern 'oturum:*' --count 1000 | wc -l
# Bulk delete in batches of 500, freeing memory in the background:
redis-cli -h redis1 -p 6379 --scan --pattern 'oturum:*' --count 1000 | xargs -r -n 500 redis-cli -h redis1 -p 6379 UNLINK

하는 일

서버를 블로킹하지 않고 커서로 keyspace를 스캔하여 패턴과 타입에 맞는 key를 세고, UNLINK로 일괄 삭제하여 백그라운드에서 메모리를 해제한다.

사용 시점

이전 애플리케이션 버전이 남긴 key를 정리할 때, prefix 아래에 key가 몇 개 있는지 알아낼 때, 또는 운영 환경에서 KEYS가 필요해 보일 때.

주의

KEYS는 keyspace 전체를 한 번에 반환하며 데이터가 크면 서버를 몇 초간 블로킹하므로 운영 환경에서 사용하지 않는다. SCAN은 스캔 중 추가/삭제된 key에 대해 완전한 보장을 하지 않으며 같은 key를 여러 번 반환할 수 있다. 공백이나 따옴표가 포함된 key 이름은 xargs에서 깨진다. 삭제 전에 개수와 몇 개의 샘플을 확인한다. 되돌릴 수 없다.

DBAtlas에서 열기 →

관련 항목