본문 바로가기
카테고리 없음

REDIS - TTL(만료시간)

by 진믈리 2024. 11. 9.
레디스에서 만료 시간, 즉 TTL은 데이터가 얼마나 오래 저장될 것인지를 나타내는 시간 설정이다. 레디스는 데이터베이스 내의 특정 키에 대한 만료 시간을 설정 할 수 있으며, 이는 데이터의 유효 기간 또는 만료 시간을 정의하는데 사용된다.

 

REDIS를 사용하여 조회수, 좋아요, 게임순위 매기기와 같은 실시간 데이터를 처리하는 것은 아주 효과 적일 수 있다. 하지만 Redis에 데이터를 계속해서 쌓아 두면 메모리 사용량이 점점 증가하게 되고, 메모리 한계를 초과하면 성능이 저하 될 수 있다. 이는 Redis의 장점인 빠른 성능을 제대로 활용하지 못하게 될 수 있다.

 

이를 해결하기 위해 Redis에서 제고하는 TTL(Time-to-Live) 기능을 활용할 수 있다.

 

TTL

TTL은 앞서 설명한 것처럼 특정 데이터가 Redis에 저장된 후 일정 시간이 지나면 자동으로 삭제되도록 하는 기능이다.

 

만료시간은 일반적으로 초 단위로 표현되며, 특정 키에 대한 만료 시간이 설정되면 해당 키와 관련된 데이터는 지정된 시간이 지난 후에 레디스에서 자동으로 삭제 된다.

 

EXPIRE

레디스에 저장된 키에 EXPIRE 커맨드를 사용하면 만료 시간을 설정할 수 있다.

 

SET timeout 100
OK
EXPIRE timeout 60
(integer) 1

 

위는 timeout이라는 키에 100이라는 값을 넣어주고 EXPIRE 를 통해 60초 뒤에 timeout 은 Redis에서 자동으로 삭제된다.

 

TTL 을 활용하면 해당  키에 대한 만료시간을 확인할 수 있다. 만료시간이 남아있다면 남은 시간을 반환하며, 키가 존재하지 않는다면 -2를 만료시간이 지정되지 않았을 경우에는 -1을 반환한다.

TTL timeout
(integer) 35

지금 현재 timeout은 만료시간은 35초 남았다.

 

INCR 커맨드로 데이터를 조작하거나 RENAME 을 이용해 키의 이름을 바꾸더라도 설정된 만료 시간은 변경되지 않는다.

INCR timeout
(integer) 101

TTL timeout
(integer) 30

RENAME timeout time
OK

TTL time
(integer) 8

 

 

그러나 기존 키에 새로운 값을 저장해 키를 덮어 쓸 때에는 이전에 설정한 만료 시간은 유지되지 않고 사라진다.

SET new redis
OK

EXPIRE new 100
(integer) 1

TTL new 
(integer) 97

SET new mysql
OK

TTL new 
(integer) -1

 

new 키에 새로 SET 커맨드를 활용하여 mysql 이라는 값을 덮어씌웠기에 이전에 설정한 만료 시간은 유지되지 않고 사라진다.