해결된 질문
24.07.26 16:33 작성
·
82
·
수정됨
0
Rate Limiter 강의 그림으로 된 예제에 대해 질문있습니다!
트랜젝션 시작을 알리는 "MULTI" 명령어 이후 "EXPIRE 1.1.1.1:10 60 / EXEC" 코드가 있습니다! 제가 잘못 이해한 걸 수도 있지만, 이렇게 하면 요청마다 만료 시간이 다시 1분으로 초기화되는 것이 아닌지 궁금합니다. 그러면 1분 안에 요청 수를 제한하는 것이 아니라 1분 안에 요청이 없으면 만료되는 형식이 될 것 같은데 제가 생각한 것이 맞을까요?
답변 2
0
2024. 07. 26. 16:47
안녕하세요! 캐시 key 구성을 보면 {클라이언트 IP}:{요청 시각(분)}
으로 이루어져 있습니다. 해당 캐시는 1분 동안의 요청 횟수를 관리하는 데이터로 최대 1분 동안만 유효한 데이터입니다. 예시에서 현재 시각이 0시 10분이라고 가정 했을 때, 0시 10분부터 11분 이전까지의 1.1.1.1 IP로부터의 요청 횟수를 기록하고 있습니다.
Fixed-window 방식에서는 11분이 되는 순간부터는 1.1.1.1:11 캐시에 새로 기록되기 시작하기 때문에 1.1.1.1:10 캐시는 더 이상 사용되지 않습니다. 정확히 남아있는 시간을 계산하여 expiry를 동적으로 지정하는 방법도 있지만, 예시에서는 고정적으로 캐시의 최대 유효 시간인 60초 후에 만료가 되도록 설계하였습니다.
Key 구성에서 시(hour)를 기록하지 않는 이유 역시 1시간 뒤에 1시 10분이 되었을 때 1.1.1.1:10 key를 재활용 할 수 있기 때문입니다 :)
0
안녕하세요, 인프런 AI 인턴입니다.
syhan7516님의 질문과 관련하여, “트랜잭션(multi) 질문입니다.” 주제로 이전에 답변된 내용이 syhan7516님의 질문 상황과 관련이 있을 수 있겠습니다. 질문에서 ‘MULTI’ 명령어와 ‘EXPIRE’ 명령어의 사용 방법에 대한 궁금증을 제기하셨는데, 해당 답변은 레디스(Redis)의 트랜잭션 처리 방법 및 명령어의 작동 원리에 대한 설명을 담고 있습니다.
특히, 트랜잭션을 이용한 처리 방법과 이와 관련된 ‘EXPIRE’ 명령어의 동작 방식에 대한 해설을 제공합니다. 제공된 답변에서는 레디스의 트랜잭션과 ‘MULTI’ 명령어 사용 시, 작업의 원자성 및 연속성이 어떻게 보장되는지, 그리고 ‘EXPIRE’ 명령어를 사용할 때의 주의사항 및 실행 방안에 대해서 설명합니다.
질문하신 내용을 참조하여, 트랜잭션(multi) 질문입니다. 답변을 확인하시면 ‘MULTI’와 ‘EXPIRE’ 명령어의 사용법 및 예제 상의 트랜잭션 처리 과정에 대한 더 자세한 이해를 도울 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
2024. 07. 26. 17:03
아하! 맞습니다! 트랜젝션 부분에만 집중해서 동작 원리를 생각을 하지 못했습니다.
알려주셔서 감사합니다!