-
Redis Repository를 사용했을 때 ttl이 끝나도 모두 삭제되지 않는 에러트러블슈팅 2024. 2. 22. 04:01
@Id값만 TTL로 사라지고 그 외에는 남아있는 문제가 발생
Redis Repository Hash말고 Set도 저장이 됨
기본적으로 @RedisHash에서 @Id 어노테이션이 적용된 key에 대해서만 ttl 기능이 동작한
@RedisHash를 통한 RedisRepository 방식에서는 Set에서 secondary index 데이터를 삽입 및 제거하며 index를 유지 관리하는데, 이때 index 정리가 수행되기 위해서는 keyspace events가 탐지되어야 하며, keyspace events에 대한 설정이 되어 있어야 한다고 합니다.
이를 해결하기 위해
@EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP) public class RedisConfig { --- } }
@EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP)
를 추가하여 해결할 수 있었습니다.
해당 옵션을 설정했을 때 Spring Data Redis에서 Key Events를 수신하게 되며, Key expired events 수신 이후 Set을 정리하게 됩니다.
* key space event로 인해 오버헤드가 발생해 성능이 저하될 수 있지만 refresh token을 개발할 때 Spring Data JPA를 사용하는 것과 비슷해서 쉽게 사용할 수 있기에 Repository를 사용하게 되었습니다.
reference
'트러블슈팅' 카테고리의 다른 글
Redis protected mode Error (0) 2024.08.15 spring security oauth2.0 kakao error (0) 2024.08.15 Github Actions Build 에러 (0) 2024.03.15 대용량 데이터 생성 후 저장, OutOfMemoryError (0) 2024.03.15 ec2 docker jenkins 플러그인 설치 에러 (0) 2024.02.22