-
Spring Data Redis TTL설정하기프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 20. 00:01728x90
TTL이란?
컴퓨터 네트워킹 및 데이터베이스 시스템에서 사용되는 용어인 "Time To Live"의 약자입니다.
데이터 레코드 또는 네트워크 패킷이 삭제되거나 만료된 것으로 간주되기 전에 존재할 수 있는 시간을 나타냅니다.
예를 들어, Redis 데이터베이스에서 키에 대한 TTL 값을 설정하면 지정된 시간이 경과한 후 해당 키가 데이터베이스에서 자동으로 삭제되도록 할 수 있습니다.
이는 메모리 사용량을 관리하고 오래되거나 오래된 데이터가 데이터베이스에서 자동으로 제거되도록 하는 데 유용합니다.
네트워킹에서 TTL은 패킷이 삭제되기 전에 패킷이 통과할 수 있는 최대 홉(라우터) 수를 지정하는 패킷의 IP 헤더에 있는 필드입니다.
패킷이 통과하는 각 라우터는 TTL 필드를 1씩 감소시키며, TTL 필드가 0에 도달하면 패킷이 삭제됩니다.
이는 패킷이 네트워크에서 무한정 순환하는 것을 방지하고 합리적인 시간 내에 의도한 목적지에 도달할 수 있도록 하기 위해 사용됩니다.
Spring Data Redis에 TTL 설정하기
@RedisHash(value = "mock-refresh-token", timeToLive = 1L) class MockRefreshTokenRedisEntity( @Id val id: String, val userId: String, ): Serializable { }
간단하게 timeToLive = 1L이면 1초 뒤에 캐시에서 사라짐을 의미합니다.
@RedisHash 어노테이션 분석
public @interface RedisHash { /** * The prefix to distinguish between domain types. * * @return * @see KeySpace */ @AliasFor(annotation = KeySpace.class, attribute = "value") String value() default ""; /** * Time before expire in seconds. Superseded by {@link TimeToLive}. * * @return positive number when expiration should be applied. */ long timeToLive() default -1L; }
이름을 나타내는 value와 timeToLive가 필드로 존재합니다.
기본적으로 -1값이 세팅되어 있고 양수라면 해당 seconds(초) 뒤에 만료가 적용됩니다.
테스트 작성
@Test @Disabled("TTL 적용 테스트로 추후에는 TTL을 1초 이상으로 사용하기 때문에 Disable합니다") fun `Redis 캐시 만료 시간 테스트`(){ //given val id = "uuid-generated" val userId = "userid-generated" val refreshToken = RefreshTokenRedisEntity( id = id, userId = userId, ) //when refreshTokenRedisRepository.save(refreshToken) Thread.sleep(2000L) //then (TTL을 1초로 설정했다면 2초후엔 사라져 조회가 되면 안된다) val result = refreshTokenRedisRepository.findById(id).isEmpty Assertions.assertTrue(result) }
저장을 했지만 sleep으로 2초를 지연시키면 TTL을 1초로 설정했기 때문에 조회가 되지 않는 테스트를 작성하였습니다.
이후 TTL 설정을 변경하는 경우에 테스트가 실패하기 때문에 disable으로 관리합니다.
참고자료
'프로젝트 > 선착순 쿠폰 발급 시스템' 카테고리의 다른 글
Kotlin Jpa Auditing - Entity 수정, 생성기간 저장 (0) 2023.05.24 Kotlin MapStruct 사용하기 (0) 2023.05.21 OpenAPI Specification으로 API-First 개발하기 (0) 2023.05.18 쿠폰 발급을 위한 Redis Set Document 읽기 (0) 2023.05.06 Embedded Redis 구성하여 테스트 수행하기 (0) 2023.05.04