Redis 만료 정책 #151
Closed
kssumin
started this conversation in
Information sharing
Redis 만료 정책
#151
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
redis 키는 passive 방식과 active 방식의 2가지 방식으로 만료된다.
수동적 만료
Redis가 지속적으로 만료된 키를 검색하지 않기 때문에 CPU를 절약할 수 있다
하지만 다시는 접근되지 않은 만료된 키가 있기 때문에 이 방식은 충분하지 않다!!!
이러한 유형의 키도 만료가 되어야 하기 때문에 능동적 만료 방식을 사용한다.
능동적 만료
즉 Redis는 수동삭제 방식을 기본 전략으로 사용하며
더 이상 접근되지 않았지만 만료된 키를 삭제하기 위해서 가볍게 설계된 능동 삭제 방식도 같이 사용한다.
참고 자료
redis expire
expire 적용한 코드
현 EEOS에서는 블랙리스트 토큰을 저장하는데 redis에 저장하고 있고 이때 expire를 통해서 토큰이 유효할 때까지만(만료 시간이 지나지 않았을 때까지)관리를 하고 있습니다.
블랙리스트 토큰 관리 이유
블랙리스트 토큰은 사용자가 탈퇴, 로그아웃과 같은 행위를 행하였을 때 해당 토큰의 만료시간이 남았지만 사용자는 더 이상 해당 토큰을 사용하지 않겠다는 의사를 전달한 것이다. 따라서 이후 해당 토큰으로 요청이 들어온다면 이는 토큰이 탈취된 것이므로 해당 요청은 block해야한다.
이와 같은 이유로 블랙리스트 토큰을 관리한다.
토큰 저장 관리소를 mysql -> redis로 변경한 이유
기존에는 토큰 저장 관리소는 Mysql에서 하고 있었습니다.
하지만 Mysql에서는 만료된 토큰이라도 계속 저장을 하고 있었고
이를 삭제하기 위해서는 주기적으로 Mysql을 탐색하여 만료된 토큰을 삭제해야 합니다.
위와 같은 별도의 리소스를 투입하지 않기 위해서 Redis에 토큰의 만료시간을 기준으로 토큰을 저장하도록 하였고
토큰이 만료되면 토큰이 Redis에서 삭제되도록 했습니다.
redis에서는 그럼 어떻게 토큰을 삭제하는거지?
위와 같은 의문이 들었습니다.
Mysql을 사용했을 때처럼 특정 시간에 개발자가 Mysql에 저장된 토큰을 검사하여 만료된 토큰을 직접 삭제하는 로직을 작성하지 않아도 되지만
Redis를 사용하면 결국에는 Redis가 주기적으로 저장된 토큰의 만료여부를 검사하는 건가? 라는 생각이 들었습니다.
CPU가 주기적으로 DB를 검사하는 건 똑같으나 개발자가 직접 해당 로직을 처리하지 않아도 된다라는 장점이다. 라고 생각했으나
redis 공식문서를 확인한 결과 기본적으로는 수동 만료 정책을 이용해서 CPU의 과부하를 줄인다는 것을 알게되었습니다.
Beta Was this translation helpful? Give feedback.
All reactions