안녕하세요. 이번 시간에는 redis에서 패턴과 일치하는 키들을 찾는 keys 명령어에 대해 간단하게 알아봅시다.

 


 먼저, 키 firstname과 lastname을 추가하겠습니다. 그러면, redis에는 firstname, lastname이 들어갈 겁니다. 이제 keys *를 입력해 보겠습니다.

 

 그랬더니, 2개의 키가 떴습니다. *는 모든 길이의, 어떠한 문자열도 match가 됩니다. 물론, 비어 있는 문자열도 됩니다. 고로, 길이가 8자인 문자열이나, 길이가 9자인 문자열도 매치가 되게 됩니다.

 

 

 이제 keys *name을 입력해 보겠습니다. 그랬더니, name으로 끝나는 패턴만 뽑혀져 나옴을 볼 수 있어요. 앞에 *가 붙은 것은 name 앞에 어떠한 문자열이 와도 된다는 의미입니다. last가 오나, first가 오나 match가 되기 때문에 2개가 뽑히게 됩니다.

 

 

 이제 ?입니다. ?는 하나의 문자와 매치가 됩니다. 따라서, keys ????????는 길이가 8인 문자열과 매치됩니다. 그렇기 때문에, lastname 이라는 키만 뽑히게 될 겁니다.

 


 이제, 키 "ab", "ac", "ad" 이렇게 3개를 추가하겠습니다.

 

 

 다음에 keys a[b-c]를 입력해 보겠습니다. 그러면, 2개의 키가 뽑히는 것을 알 수 있습니다. [b-c]가 문자 집합 {b, c}에 대응되기 때문입니다. 즉, "ab"이거나 "ac"인 것만 match가 되는 셈입니다. 반대로 이 경우는 어떨까요?

 

 

 keys a[^b-c]를 보겠습니다. 앞에 ^가 붙었기 때문에 not입니다. 따라서, a 뒤에 b가 오거나, c가 오는 패턴이 아닌 것과 매치됩니다. 그러한 것이 "ad" 하나가 있었으니, "ad"만 돌려주게 됩니다.

 

 


 이제 다른 질문을 해 봅시다. 패턴과 일치하는 키의 갯수만을 구하고 싶습니다. 어떻게 하면 좋을까요?

 

 redis-cli keys *를 입력해 봅시다. 그러면, 현재 redis에 있는 모든 키들이 나온다는 것을 알 수 있습니다. 한 줄에 하나씩이요. 이 결과를 wc에 넘기기만 하면 됩니다.

 

 

 wc의 옵션을 보면 -l이 있는데요. 줄 수를 셀 때에는 -l 옵션을 붙입니다. 따라서 piping을 이용해서, redis-cli keys pattern의 결과를 wc -l의 인풋으로 넣어버리면 됩니다.

 

 

 모든 키의 갯수는 5개입니다. a로 시작하는 키의 갯수는 몇 개일까요?

 

 

 3개입니다. redis-cli keys a*로 3개의 line을 가진 output이 나왔습니다. 그 결과를 wc -l이 받아서 처리하니 3이 나온 셈입니다. 이 명령은 문서에서도 언급되었다시피, 복잡도가 O(n)이기 때문에 상당히 느립니다. 따라서, 어플리케이션에서는 조심해서 사용해야 합니다.