Redis 프로세스 내 소비에는 주로 자체 메모리 + 개체 메모리 + 버퍼 메모리 + 메모리 조각화가 포함됩니다.
메모리. Redis 데이터는 메모리에 저장되기 때문입니다. 인메모리 데이터베이스는 일반 관계형 데이터베이스에 비해 읽기 속도는 빠르지만 메모리 리소스를 더 많이 소모한다.
객체 메모리(추천 학습: Redis 동영상 튜토리얼)
객체 메모리는 Redis 메모리에서 가장 큰 부분이며 모든 사용자 데이터를 저장합니다. Redis의 모든 데이터는 키-값 쌍이 생성될 때마다 키 개체와 값 개체라는 두 가지 이상의 유형 개체가 생성됩니다. 메모리 소비는 간단히 크기(키) + 크기(값)으로 이해될 수 있습니다. 키 개체는 모두 문자열입니다. Redis를 사용할 때는 키가 메모리 소비에 미치는 영향을 무시하기 쉽습니다. 값 개체는 더 복잡하며 주로 문자열, 목록, 해시, 집합 및 순서 집합의 5가지 기본 데이터 유형을 포함합니다. 각 값 개체 유형은 사용 규모에 따라 서로 다른 메모리를 차지합니다. 이를 사용할 때 메모리 오버플로를 방지하기 위해 값 객체 점유를 합리적으로 추정하고 모니터링해야 합니다.
버퍼 메모리
버퍼 메모리에는 주로 클라이언트 버퍼, 백로그 복사 버퍼, AOF 버퍼가 포함됩니다.
클라이언트 버퍼링은 Redis 서버에 대한 모든 TCP 연결의 입력 및 출력 버퍼링을 의미합니다. 입력 및 출력 버퍼는 제어할 수 없습니다. 최대 공간은 1G입니다. 이를 초과하면 연결이 끊어집니다. 입력 버퍼링은 client-output-buffer-limit 매개변수에 의해 제어됩니다:
1. 일반 클라이언트: 복제 및 구독 클라이언트를 제외한 모든 연결에 대해 Redis의 기본 구성은 client-output-buffer-limit Normal 0 0 0입니다. Redis는 일반 클라이언트의 출력 버퍼를 제한하지 않습니다. 일반적으로 일반 클라이언트의 메모리 소비는 무시할 수 있습니다. 그러나 연결이 느린 클라이언트가 많이 연결된 경우에는 Maxclients의 메모리 소비를 무시할 수 없습니다. . 모니터 명령과 같이 대량의 데이터를 출력하고 클라이언트에 데이터를 제때 푸시할 수 없는 명령만 사용하면 Redis 서버의 메모리가 갑자기 급증하기 쉬우므로 주의하시기 바랍니다.
슬레이브 클라이언트: 마스터 노드는 명령 복제를 위해 각 슬레이브 노드에 대해 별도의 연결을 설정합니다. 기본 구성은 클라이언트-출력-버퍼-한계 슬레이브 256mb 64mb 60입니다. 마스터 노드와 슬레이브 노드 사이의 네트워크 지연이 높거나 마스터 노드가 많은 수의 슬레이브 노드를 마운트하는 경우 이 메모리 소비 부분이 큰 부분을 차지합니다. 마스터 노드는 2개 이하의 슬레이브 노드를 마운트하는 것이 좋습니다. , 마스터 및 슬레이브 노드는 서로 다른 컴퓨터실과 같은 특정 네트워크 환경에서 느린 복제 클라이언트 연결로 인해 발생하는 오버플로를 방지합니다.
구독 클라이언트: 게시 및 구독 기능을 사용할 때 연결 클라이언트는 별도의 출력 버퍼를 사용합니다. 기본 구성은 client-output-buffer-limit pubsub 32mb 8mb 60이며, 구독 서비스의 메시지 생성 속도가 더 빠릅니다. 소비 속도가 느려지면 출력 버퍼에서 백로그가 생성되어 출력 버퍼 공간이 오버플로됩니다.
복제 백로그 버퍼: Redis는 부분 복제 기능을 구현하기 위해 버전 2.8 이후에 재사용 가능한 고정 크기 버퍼를 제공하며 repl-backlog-size 매개변수에 따라 제어되며 기본값은 1MB입니다. 전체 마스터 노드에 대해 하나의 복사 백로그 버퍼만 있고 모든 슬레이브 노드가 이 버퍼를 공유하므로 100MB와 같이 더 큰 버퍼 공간을 설정할 수 있습니다.
AOF 버퍼: 공간의 이 부분은 Redis 재작성 중 최근 쓰기 명령을 저장하는 데 사용됩니다.
3. 메모리 조각화
Redis의 기본 메모리 할당자는 jemalloc을 사용하며 선택적 할당자는 glibc, tcmalloc입니다. 메모리를 더 잘 관리하고 재사용하기 위해 메모리 할당자는 일반적으로 고정된 범위의 메모리 블록을 사용하여 메모리를 할당합니다.
다음 시나리오에서는 높은 메모리 조각화 문제가 발생하기 쉽습니다.
기존 키에 대한 추가 및 범위 설정과 같은 빈번한 업데이트 작업과 같은 빈번한 업데이트 작업.
만료된 키가 많이 삭제되면 키 개체가 만료되어 삭제된 후에는 해제된 공간을 완전히 활용할 수 없어 조각화 비율이 증가합니다.
Redis 관련 기술 기사를 더 보려면 Redis 데이터베이스 사용 튜토리얼 소개 칼럼을 방문하여 알아보세요!
위 내용은 Redis는 주로 어떤 리소스를 소비합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!