개발 서버에 있는 Redis에 저장된 데이터를 한 번에 지우고 싶은데, 데이터가 너무 많아서 난감한 가운데 찾은 방법을 공유해본다.
redis에서는 키값을 기반으로 데이터를 지우는 del 명령어를 지원하는데, 명령어 이용방식은 다음과 같다.
del [key1] [key2] [key3] ...
내가 지우고 싶은 데이터가 저장된 키의 형태는 다음과 같았다.
BlockToken:<어쩌구저쩌구>
redis에서는 keys 명령어를 통해 키값으로 저장된 데이터를 조회할 수 있으며, glob-style pattern을 통해 키를 조회할 수 있다.
KEYS – Redis
Returns all keys matching pattern. While the time complexity for this operation is O(N), the constant times are fairly low. For example, Redis running on an entry level laptop can scan a 1 million key database in 40 milliseconds. Warning: consider KEYS as
redis.io
- * : 모든 문자 매치(match): h*llo -> hllo, heeeello, etc
- ? : 1개 문자 매치(match): h?llo -> hallo, hello, hxllo, etc
- [alphabet] : 대괄호 안에 있는 문자 매치(match): h[ae]llo -> hallo, hello
- [^e] : 대괄호 안에 있는 문자 제외하고 매치(match): h[^e]llo -> hallo, hbllo, ... 그러나 hello는 제외됨
- [a-c] : 대괄호 안에 있는 문자 범위로 매치(match): h[a-c]llo -> hallo, hbllo, hcllo
- \ : 위에 사용한 특수문자(*?[^])를 그대로 사용하려면 앞에 \를 붙여야 함.
그래서 나는 "BlockToken:*" 명령어를 통해 해당 이름으로 등록된 키 정보를 모두 조회해봤다.
확인해보니 1069개의 데이터가 쌓여있었다. 현재 db에 중요한 정보가 없다면 flush 해버리면 되지만, 다른 중요한 정보도 같이 저장되어있었기에 딱 "BlockToken:*"에 매칭 되는 키값으로 저장된 데이터만 지워야 했다. 그래서 간단하게 리눅스 명령어를 통해 키별 데이터를 모두 삭제하였다.
del 명령어의 결과로 1069개의 데이터가 삭제됨을 알 수 있었고, 위에 keys 명령어를 통해 조회된 데이터의 수와 같으므로 모든 데이터가 삭제된 것을 알 수 있었다.
실제로 키값을 조회해보면 모든 데이터가 지워졌기에 empty list로 반환된다.
이렇듯 리눅스에서는 파이프(|)와 xargs 명령어를 활용하면, 앞에 명령어의 결과를 다음 명령어의 인자로 넘겨줄 수 있다. 따라서 레디스에 저장된 많은 데이터를 특정 키값을 통해 한번에 지우고 싶다면, 파이프(|) 명령어와 xargs 명령어를 적절히 사용해보자.
'Programming > Database' 카테고리의 다른 글
[DB,Transaction] Transaction 과 Lock (0) | 2021.12.26 |
---|---|
[Mysql] group_concat 으로 그룹핑한 데이터 하나로 모으기 (0) | 2020.07.04 |
[Mysql] 버전 문자열 비교 및 숫자 변환 (2) | 2019.06.05 |
DBMS의 장점 (0) | 2016.06.20 |
데이터베이스 사용자 (0) | 2016.06.20 |