Redis ‐ Redis 사용법 - thought-corner/backend-roadmap GitHub Wiki
Redis 기본 명령어
- 아래 명령은 redis-cli로 접속한 상태에서 실행한다.
- 데이터(Key, Value) 저장하기
$ set [KEY NAME] [VALUE]
- 데이터 조회하기
$ get [KEY NAME]
- 데이터베이스에 저장된 모든 키 조회하기
$ keys *
❗
keys *주의사항
KEYS는 모든 키를 한 번에 훑는 O(N) 명령이다. Redis는 명령을 싱글 스레드로 처리하므로, 키가 수백만 개인 운영 서버에서keys *를 치면 그 시간 동안 서버 전체가 블로킹되어 장애로 이어질 수 있다.- 학습·로컬 환경에서만 사용하고, 운영 환경에서는 커서 기반으로 나눠서 순회하는
SCAN을 사용해야 한다.
- 데이터 삭제하기
$ del [KEY NAME]
- 데이터 저장 시 만료시간(TTL, Time To Live) 정하기
$ set [KEY NAME] [VALUE] ex [Seconds(만료 시간)]
❗레디스 만료시간(TTL) 주의사항
- 레디스는 RDBMS와는 달리 데이터 저장 시 만료 시간을 설정할 수 있다. 영구적으로 데이터를 저장하지 않고 일정 시간이 되면 데이터가 삭제되도록 세팅할 수 있다.
- 레디스의 특성상(=인메모리) 메모리 공간이 한정되어 있기 때문에 모든 데이터를 레디스에 저장할 수 없다. 따라서 만료시간을 활용해 자주 사용하는 데이터만 레디스에 저장해놓고 쓰는 식으로 사용하는 것을 권장한다.
- 만료시간(TTL) 확인하기
$ ttl [KEY NAME]
- 전체 데이터 삭제하기
$ flushall
❗
flushall주의사항
- 모든 데이터베이스의 전체 데이터를 즉시 삭제하는 명령으로, 운영 환경에서 실수로 실행하면 복구 불가능한 대형 사고다.
- 현재 선택된 DB만 비우려면
flushdb, 대량 삭제 시 블로킹을 피하려면flushall async를 사용한다.- 운영 서버에서는
rename-command설정으로 이런 위험 명령을 비활성화하거나 이름을 바꿔두는 것이 일반적이다.
Redis Key 네이밍 컨벤션 익히기
- 콜론(:)을 활용해 계층적으로 의미를 구분해서 사용한다.
- 이렇게 계층을 잡아두면
scan 0 match users:*처럼 특정 도메인의 키만 골라 순회하거나, 도메인별로 TTL·모니터링 정책을 다르게 가져가기 쉽다. - 팀 전체가 같은 컨벤션을 쓰는 것이 핵심이다. 키 이름이 곧 스키마 문서 역할을 하기 때문. 지나치게 긴 키는 메모리를 낭비하므로 의미가 통하는 선에서 짧게 유지한다.
users:100:profile : 사용자들 중에서 PK가 100인 사용자의 프로필
products:123:details : 상품들 중에서 PK가 123인 상품의 세부사항