소개
Redis는 오픈 소스 인메모리 키-값 데이터 저장소입니다. 이는 문제 해결 및 디버깅에 도움이 되는 여러 명령어와 함께 제공됩니다. Redis의 성격상 인메모리 키-값 저장소로, 이러한 명령어 중 많은 것이 메모리 관리에 중점을 두지만, Redis 서버의 상태 개요를 제공하는 데 유용한 다른 명령어도 있습니다. 이 튜토리얼에서는 Redis 사용 중에 발생할 수 있는 문제를 진단하고 해결하는 데 도움이 되는 일부 명령어를 사용하는 방법에 대한 세부 정보를 제공합니다.
이 가이드 사용 방법
이 가이드는 자체 포함된 예제를 가진 치트 시트로 작성되었습니다. 작업을 완료하려는 작업과 관련된 섹션으로 이동하는 것을 권장합니다.
이 가이드에 표시된 명령어는 Redis 버전 6.0.16을 실행하는 Ubuntu 22.04 서버에서 테스트되었습니다. 비슷한 환경을 설정하려면 Ubuntu 22.04에 Redis를 설치하고 보안 설정하는 방법에 대한 단계 1을 따를 수 있습니다. 이 명령어의 동작을 redis-cli
를 사용하여 보여드릴 것입니다. 다른 Redis 인터페이스를 사용하는 경우 — 예를 들어 Redli — 특정 명령의 정확한 출력이 다를 수 있습니다.
또 다른 방법으로는 이러한 명령을 테스트하기 위해 관리형 Redis 데이터베이스 인스턴스를 제공할 수 있지만, 데이터베이스 제공업체가 허용하는 제어 수준에 따라이 가이드의 일부 명령이 설명된 대로 작동하지 않을 수 있습니다. DigitalOcean 관리형 데이터베이스를 프로비저닝하려면 관리형 데이터베이스 제품 설명서를 따르십시오. 그런 다음 TLS를 통해 관리형 데이터베이스에 연결하려면
메모리 관련 문제 해결
memory usage
는 현재 단일 키에 의해 사용되는 메모리 양을 알려줍니다. 키의 이름을 인수로 사용하고 사용하는 바이트 수를 출력합니다. 먼저 예제 변수를 설정하십시오:
- set key_meaningOfLife "Food"
다음으로 memory usage
로 메모리를 확인하십시오:
- memory usage key_meaningOfLife
Output(integer) 88
Redis 서버가 메모리를 사용하는 방식에 대한 보다 일반적인 이해를 위해 memory stats
명령을 실행할 수 있습니다:
- memory stats
이 명령은 메모리와 관련된 지표 및 해당 값의 배열을 출력합니다. 다음은 memory stats
에서 보고된 메트릭입니다:
peak.allocated
: Redis에서 사용 된 최대 바이트 수total.allocated
: Redis에서 할당 된 총 바이트 수startup.allocated
: 시작시 Redis에서 사용 된 초기 바이트 수replication.backlog
: 바이트 단위의 복제 대기열 크기clients.slaves
: 모든 복제체의 총 크기오버헤드, 출력 및 쿼리 버퍼 및 연결 컨텍스트의 의미clients.normal
: 모든 클라이언트 오버헤드의 총 크기aof.buffer
: 현재 및 재작성된 append-only file 버퍼의 총 크기db.0
: 서버에서 사용중인 각 데이터베이스의 주요 및 만료 사전의 오버헤드, 바이트로 보고됨overhead.total
: Redis 키 공간을 관리하는 데 사용되는 모든 오버헤드의 합계keys.count
: 서버의 모든 데이터베이스에 저장된 키의 총 수keys.bytes-per-key
: 서버의 순 메모리 사용량과keys.count
의 비율dataset.bytes
: 데이터 세트의 크기, 바이트 단위dataset.percentage
: Redis의 순 메모리 사용량 중dataset.bytes
가 차지하는 비율peak.percentage
:total.allocated
중peak.allocated
가 차지하는 비율분할
: 현재 사용 중인 메모리 양을 물리적 메모리 Redis가 실제로 사용하는 양으로 나눈 비율
memory malloc-stats
는 리눅스 시스템에서 Redis에서 사용하는 메모리 할당자인 jemalloc의 내부 통계 보고서를 제공합니다:
- memory malloc-stats
메모리 관련 문제를 겪고 있는 것처럼 보이지만 이전 명령어의 출력을 구문 분석하는 것이 도움이 되지 않는 경우, memory doctor
를 실행해 볼 수 있습니다:
- memory doctor
이 기능은 찾을 수 있는 메모리 소비 문제를 출력하고 가능한 해결책을 제안합니다.
Redis 인스턴스에 대한 일반 정보 가져오기
A debugging command that isn’t directly related to memory management is monitor
. This command allows you to review a constant stream of every command processed by the Redis server:
- monitor
OutputOK
1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared"
1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"
디버깅에 유용한 또 다른 명령어는 info
입니다. 이 명령어는 서버에 대한 여러 정보와 통계를 반환합니다:
- info
Output# Server
redis_version:6.0.16
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:a3fdef44459b3ad6
redis_mode:standalone
os:Linux 5.15.0-41-generic x86_64
. . .
이 명령어는 많은 정보를 반환합니다. 하나의 정보 블록만 반환하려면 info
에 인수로 지정할 수 있습니다:
- info CPU
Output# CPU
used_cpu_sys:173.16
used_cpu_user:70.89
used_cpu_sys_children:0.01
used_cpu_user_children:0.04
info
명령어로 반환되는 정보는 사용 중인 Redis 버전에 따라 다를 수 있습니다.
keys
명령어 사용하기
keys
명령어는 키의 이름을 잊어버렸거나 실수로 이름을 잘못 입력한 경우에 유용합니다. keys
는 패턴과 일치하는 키를 검색합니다:
- keys pattern
다음과 같은 글로브 스타일 변수가 지원됩니다:
?
는 어떤 단일 문자에 대해서도 일치하는 와일드카드입니다. 따라서s?mmy
는sammy
,sommy
,sqmmy
와 일치합니다*
는 아무 문자나 포함하지 않은 문자를 포함하여 어떤 수의 문자와도 일치하는 와일드카드입니다. 따라서sa*y
는sammy
,say
,sammmmmmy
,salmony
와 일치합니다- 패턴에 포함될 수 있는 두 개 이상의 문자를 괄호로 묶어 지정할 수 있습니다. 그래서
s[ai]mmy
는sammy
와simmy
와 일치하지만summy
와 일치하지 않습니다 - 하나 이상의 문자를 무시하는 와일드카드를 설정하려면 해당 문자를 괄호로 묶고, 선행하여 삽입하면 됩니다(
^
). 따라서s[^oi]mmy
는sammy
와sxmmy
와 일치하지만sommy
나simmy
와 일치하지 않습니다 - 문자 범위를 포함하는 와일드카드를 설정하려면 범위의 시작과 끝을 하이픈으로 구분하고 괄호로 묶으면 됩니다. 따라서
s[a-o]mmy
는sammy
,skmmy
,sommy
와 일치하지만srmmy
와 일치하지 않습니다
경고: Redis 문서는 keys
가 성능에 중대한 부정적인 영향을 미칠 수 있으므로 거의 절대적으로 프로덕션 환경에서 사용되지 않아야 함을 경고합니다.
결론
이 안내서는 Redis 작업 중에 발생할 수 있는 문제를 해결하는 데 도움이 되는 여러 명령을 설명합니다. 이 안내서에서 학습하고 싶은 다른 관련 명령, 인수 또는 절차가 있다면 댓글에서 질문하거나 제안하십시오.
Redis 명령에 대한 자세한 정보는 Redis 데이터베이스 관리 방법 시리즈 튜토리얼을 확인하십시오.
Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis