15. Redis라면 hash 자료 구조를 쓸 수도…
• Redis는 hash구조를 제공하므로
• hset <main key> <sub key> <value>
• hset <userid> <api type> <마지막 시간>
• 형태로 넣어두고 체크 가능
• Memcached는 안됨.
• Arcus는 가능 btree 제공
16. 그럼? userid + url 종류
• api:<userid>:url종류로 cache key를 잡으면 해결이 됨.
• 그런데 특정 userid의 캐시를 전부 지우고 싶다면?
• 일일이 찾아야 함.
17. 가정 #3
• 특정 API를 최근 5분간 10번만 호출할 수 있다면…
00 01 02 03 04 05 06 07 08
최대 10번
최대 10번
최대 10번
최대 10번
18. 기존의 방식으로 처리 안됨
• 단순히 userid + api 종류 로는 처리가 안됨.
19. 각 1분간의 정보를 따로 저장한다면?
• 특정 API 호출을 1분 단위로 개수를 저장하고, 최근 5개의 값을 보고 api 허용
을 결정한다.
1 2 3 4 5 6 7 8
3 1 1 4 1
호출 시점
최대 3개를 호출 할 수 있음
20. 각 1분의 정보를 저장한다면…
• <userid> + <api type> + <yyyyMMddHHmm> 형태로 저장 가능
• value로는 그 시간(분 단위)의 호출 개수를 저장한다.
• 2019년 1월 13일 00시 10분 이라면 다음 5개를 가져와서 값을 더한다.
• 201901130010
• 201901130009
• 201901130008
• 201901130007
• 201901130006
• 만약 최근 5초라면 key는 초에 대한 정보가 들어가야 함.
• 20190113000601