개발 서버에 있는 Redis에 저장된 데이터를 한 번에 지우고 싶은데, 데이터가 너무 많아서 난감한 가운데 찾은 방법을 공유해본다.
redis에서는 키값을 기반으로 데이터를 지우는 del 명령어를 지원하는데, 명령어 이용방식은 다음과 같다.
del [key1] [key2] [key3] ...
내가 지우고 싶은 데이터가 저장된 키의 형태는 다음과 같았다.
BlockToken:<어쩌구저쩌구>
redis에서는 keys 명령어를 통해 키값으로 저장된 데이터를 조회할 수 있으며, glob-style pattern을 통해 키를 조회할 수 있다.
- * : 모든 문자 매치(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 |