redis에서 특정 패턴을 가지는 키를 모두 삭제하는 방법이 없을까요? xargs를 이용하면 가능합니다. 먼저 키 값이 h1:1, h1:2, h1:3, h1:4, h1:5인 것을 넣어보겠습니다. 다음에 keys *를 입력하면 모든 키가 나옵니다. h1:2, h1:1, h1:3, h1:4, h1:5가 있습니다. 상당히 많은 키가 있는 경우에, 이들을 빠르게 삭제하고 싶은데요. redis에서는 패턴 삭제를 지원하지 않습니다. 대신에, 키를 삭제하는 연산과 특정 패턴을 가지는 키들을 보는 연산을 지원해 줍니다. 이를 이용해 봅시다. keys h1:*는 h1:으로 시작하는 패턴의 키들을 모두 얻어옵니다. h1:2, h1:1, h1:3, h1:4, h1:5가 모두 해당 패턴애 match가 되니까 출력되겠네요. s..
REDIS 검색 결과
일정 시간동안 n회 이상 인증을 한 로그를 어떻게 남기면 좋을까요? 만약에 1일 이상 지난 데이터들에 대해서 어떻게 무효화 하는 것이 좋을까요? 키 값이 동일한 상황이고, 시간대별로 인증 기록이 남아야 한다면 sorted set도 나쁜 선택이 아닙니다. 스코어를 시간을 하고요. expire를 하는 쪽은 zremrangebyscore 등으로 하는 것도 나쁘지 않은 선택입니다. 이 글에서는 그냥, zremrangebyscore 정도만 이해하는 걸로 해 보도록 하겠습니다. 먼저 test라는 것을 생성하고, score가 0, -1, 2인 데이터를 넣습니다. zrangebyscore로 test의 스코어가 -1이상 2이하인 것을 score랑 같이 조회해 봅시다. 그러면, -1, 0, 2 이렇게 3개가 나옴을 볼 수..
특정 시간에 인증을 몇 회 했는지 어떻게 기록하면 좋을까요? 결론부터 말하면 redis의 sorted set을 이용하는 것도 좋은 선택이 될 수 있습니다. 저는 zadd 명령어를 이용해서 관리하는 방법을 보여줄 겁니다. 기본형은 zadd key score member입니다. key와 연관되는 sorted set에 점수가 score이고, 멤버가 member인 정보를 넣습니다. 어떤 정보를 넣으면 좋을까요? 어떤 시간에 발생한 이벤트의 경우, timestamp를 넣습니다. 이 timestamp를 메타 데이터에 저장하면 언제 이벤트가 발생했는지 알 수 있습니다. 제가 모의 코딩테스트에 절찬리에 출제했던 문제도 비슷한 방식으로 접근하면 됩니다. redis에서 sorted set은 1차 정렬 기준을 score, ..
저번시간에 redis의 incr에 대해 배웠습니다. 그러면서 ttl이 있는 counter를 구현해 보았는데요. 한 가지 문제점이 있었습니다. incr을 하고, ttl을 설정하는 것이 2개의 작업으로 쪼개졌었습니다. 이 작업 하나 하나는 atomic 하겠지만, 두 개의 작업은 그렇지 않습니다. race condition이 발생했을 때, 문제가 발생할 수 있는 여지가 있었는데요. 문서에서 몇 가지 방법을 소개했었습니다. 그 중에 2.6 이상부터 가능한 LUA script와 eval 명령어를 이용하는 방법이 있습니다. 간단하게 소개해 드리도록 하겠습니다. 먼저, eval은 LUA script, key 갯수, 키, argument들로 구성됩니다. 스크립트는 이 문서를 보시면 됩니다만, 간단한 예제 몇 개를 보면..
안녕하세요. 이번 시간에는 redis의 incr 명령어를 알아봅시다. 먼저 key test를 조회해 봅시다. 그랬더니 nil이 떴습니다. 키가 없어서 그런 것일 겁니다. 이제 incr test 명령어를 입력해 봅시다. 그러면, 1이 리턴됩니다. test가 없는 상태에서 incr test를 하니, 1이 나왔습니다. 그런데, ttl을 따로 설정하지 않았습니다. 그렇기 때문에 ttl test를 입력하면 -1이 나오게 됩니다. 이제 expire test 300을 입력해 보겠습니다. 그 다음에 다시 ttl test를 입력해 보면 아까와는 다르게 297이라는 수가 뜨게 됩니다. 이것은 297초 후에 test라는 키가 사라진다는 것을 의미합니다. 이제 incr test와 ttl test를 순서대로 실행해 보겠습니다...
최근댓글