**TTL (Time-To-Live)**은 Redis에서 특정 키의 유효 기간(만료 시간, Expiration Time)을 설정하는 기능입니다.
TTL이 설정된 키는 지정된 시간이 지나면 자동으로 삭제됩니다.
TTL은 캐시 만료, 세션 관리, 임시 데이터 저장 등의 용도로 자주 사용됩니다.
1. Redis에서 TTL 설정 및 확인 방법
Redis에서 TTL을 설정하는 주요 명령어는 EXPIRE, PEXPIRE, EXPIREAT, PEXPIREAT 입니다.
✅ TTL 설정 (EXPIRE)
EXPIRE <key> <seconds> → 키의 TTL을 초(Seconds) 단위로 설정
SET session:user123 "active"
EXPIRE session:user123 60 # 60초 후 자동 삭제
📌 session:user123 키는 60초 후 자동으로 삭제됩니다.
✅ TTL 확인 (TTL)
TTL <key> → 키의 남은 TTL을 초 단위로 확인
TTL session:user123 # 45 (현재 45초 남음)
📌 키가 만료되기까지 남은 시간을 초 단위로 반환합니다.
✅ 밀리초 단위 TTL 설정 (PEXPIRE)
PEXPIRE <key> <milliseconds> → 키의 TTL을 밀리초(Milliseconds) 단위로 설정
PEXPIRE session:user123 5000 # 5초(5000ms) 후 자동 삭제
✅ 특정 시간에 만료 설정 (EXPIREAT, PEXPIREAT)
EXPIREAT <key> <timestamp> → Unix 타임스탬프(초) 기준으로 만료 설정
EXPIREAT session:user123 1712123456 # 2024-04-03 12:30:56에 만료
PEXPIREAT <key> <timestamp> → Unix 타임스탬프(밀리초) 기준으로 만료 설정
PEXPIREAT session:user123 1712123456789 # 밀리초 단위 타임스탬프
2. TTL 관련 명령어
명령어 | 설명 | 단위 |
EXPIRE key seconds | 특정 키의 TTL을 초 단위로 설정 | 초(Seconds) |
PEXPIRE key milliseconds | 특정 키의 TTL을 밀리초 단위로 설정 | 밀리초(Milliseconds) |
EXPIREAT key timestamp | 특정 키를 지정된 Unix 타임스탬프(초)까지 유지 | 초(Seconds) |
PEXPIREAT key timestamp | 특정 키를 지정된 Unix 타임스탬프(밀리초)까지 유지 | 밀리초(Milliseconds) |
TTL key | 키의 남은 TTL을 초 단위로 반환 | 초(Seconds) |
PTTL key | 키의 남은 TTL을 밀리초 단위로 반환 | 밀리초(Milliseconds) |
PERSIST key | 키의 TTL을 제거하여 영구적으로 유지 | - |
3. TTL이 없는 경우
- TTL <key>를 실행했을 때, 다음 값이 반환될 수 있습니다.
반환값 | 의미 |
> 0 | 해당 키의 남은 TTL (초 단위) |
-1 | 키가 존재하지만 TTL이 없음 (영구 저장) |
-2 | 키가 존재하지 않음 (이미 만료됨) |
예제
SET mykey "hello"
TTL mykey
# -1 (TTL이 설정되지 않음)
SET temp "data"
EXPIRE temp 10
TTL temp
# 7 (7초 남음)
4. TTL이 중요한 이유 (사용 사례)
✅ 1) 캐시 시스템 (자동 데이터 만료)
TTL을 설정하면 오래된 캐시 데이터를 자동으로 삭제할 수 있습니다.
SET cache:data "result"
EXPIRE cache:data 300 # 5분 후 자동 삭제
→ 메모리 낭비 방지 & 최신 데이터 유지 가능
✅ 2) 세션 관리 (자동 로그아웃)
Redis는 사용자 세션을 TTL과 함께 저장하여 자동 로그아웃을 구현할 수 있습니다.
SET session:user123 "active"
EXPIRE session:user123 1800 # 30분 후 세션 만료
→ 일정 시간 후 세션이 자동 만료되어 보안 강화
✅ 3) 레이트 리미팅 (Rate Limiting)
API 요청을 제한하는 데 TTL이 사용됩니다.
INCR user:request:192.168.0.1
EXPIRE user:request:192.168.0.1 60 # 1분 동안 유지
→ 같은 IP가 1분 동안 과도한 요청을 보내는 것을 방지
5. TTL이 설정된 키의 동작 방식
📌 TTL이 지난 키는 언제 삭제될까?
Redis에서는 만료된 키를 즉시 삭제하지 않고, Lazy Deletion 또는 Active Expiration 기법을 사용하여 제거합니다.
- Lazy Deletion (느린 삭제)
- 키를 조회(GET key)할 때, 만료된 키를 발견하면 즉시 삭제
- 단점: 오래된 키가 남아 있을 가능성 있음
- Active Expiration (주기적 스캔)
- Redis가 주기적으로 일정 비율의 키를 검사하고 만료된 키 삭제
- volatile-* 정책을 사용할 경우, 캐시가 꽉 차면 오래된 TTL 키를 먼저 삭제
6. TTL 제거 (PERSIST)
TTL을 제거하고 키를 영구적으로 유지하려면 PERSIST 명령어를 사용합니다.
SET session:user123 "active"
EXPIRE session:user123 60 # 60초 TTL 설정
PERSIST session:user123 # TTL 제거 → 영구 저장
→ session:user123 키는 TTL 없이 영구적으로 유지됩니다.
7. 결론
✅ TTL을 설정하면 Redis가 자동으로 키를 삭제하여 메모리 낭비를 방지할 수 있음
✅ 캐시, 세션, API 요청 제한 등의 다양한 용도로 활용 가능
✅ TTL이 설정된 키는 Lazy Deletion과 Active Expiration을 통해 삭제됨
✅ TTL이 필요 없을 경우 PERSIST 명령어로 제거 가능
🚀 즉, TTL은 Redis에서 데이터 관리 및 자동 삭제를 위한 필수적인 기능입니다! 🔥
'데이터베이스 > Redis' 카테고리의 다른 글
Redis 자료구조 완벽 정리: Strings, Lists, Sets, Hashes, Sorted Sets (0) | 2025.05.05 |
---|---|
Redis와 AWS SQS (0) | 2025.04.17 |
Redis RDB vs AOF 비교 (0) | 2025.03.03 |
Redis Pipelining이란? (1) | 2025.03.03 |
Redis Pub/Sub vs Kafka 비교 (0) | 2025.03.03 |