상황
$ redis-cli --bigkeys
레디스에 메모리 사용량이 내려가지 않아서 어디에서 메모리를 사용하는지 확인하기 위해서 위의 명령어를 사용하였습니다.
bigkeys 명령어는 scan하기에 운영에서 사용해도 됩니다.
Biggest set found so far 'spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:userId' has 555 members
결과를 보니 스프링 세션을 레디스에 저장되도록 설정하여 생기는 문제로 보입니다. 데이터가 많기에 하나씩 삭제할 수는 없으며 키 패턴에 맞추어서 한 번에 삭제를 해야합니다.
해결
레디스는 복수개의 키를 한 번에 삭제하는(벌크 삭제) 방법을 제공하지 않습니다. 하지만 약간의 커멘드 조합으로 복수의 값을 삭제할 수 있습니다.
redis-cli --scan --pattern 'key1:key2:*' | xargs redis-cli unlink
del 로 지우면 키를 지우는동안 아무것도 사용할 수 없습니다. unlink를 사용하면 키를 백그라운드로 지우기에 벌크 연산에는 del보다 unlink를 사용하는것이 적절합니다.
앞에서 키 패턴에 맞는 스캔 결과를 unlink 값으로 보냅니다. 이를 통해서 하위의 키를 한번에 지울 수 있습니다.
$ redis-cli --scan --pattern 'spring:session:*' | xargs redis-cli unlink
앞서 본 문제의 레디스에 저장된 스프링 세션 정보를 삭제하려면 위의 명령어를 사용하면 됩니다.
'Computer Science > DevOps' 카테고리의 다른 글
nginx 에러 invalid PID number "" in "/usr/local/Cellar/nginx/1.21.3/logs/nginx.pid" (4) | 2022.01.31 |
---|---|
nginx 에러 open() "/nginx/1.21.3/logs/nginx.pid" failed (2: No such file or directory) 해결 (0) | 2022.01.31 |
Github CLI 시작하기 (gh pr) (2) | 2020.09.19 |
Github CLI 시작하기 (gh issue) (0) | 2020.09.19 |
Github CLI 시작하기 (gh repo) (0) | 2020.09.19 |