>  기사  >  데이터 베이스  >  Redis 메모리 최적화 방법 소개

Redis 메모리 최적화 방법 소개

尚
앞으로
2019-11-30 15:36:511807검색

Redis 메모리 최적화 방법 소개

1. 특수 인코딩:

Redis 2.2부터 특수 인코딩을 통해 많은 데이터 유형을 저장 공간에 최적화할 수 있습니다. 그 중 Integer로 구성된 Hash, List, Set 모두 이 방법을 사용하면 저장 구조를 최적화하여 어떤 경우에는 9/10의 공간을 절약할 수 있습니다. (권장: redis 비디오 튜토리얼)

이러한 특수 인코딩은 Redis 사용에 완전히 투명합니다. 실제로 이는 CPU와 메모리 간의 트랜잭션일 뿐입니다. 메모리 사용량이 높을수록 데이터를 연산할 때 자연스럽게 더 많은 CPU가 소모되며, 그 반대의 경우도 마찬가지입니다. Redis는 다음과 같이 특수 인코딩과 관련된 다양한 임계값을 설정하기 위한 구성 매개변수 세트를 제공합니다.

#如果Hash中字段的数量小于参数值,Redis将对该Key的Hash Value采用特殊编码。
hash-max-zipmap-entries 64
#如果Hash中各个字段的最大长度不超过512字节,Redis也将对该Key的Hash Value采用特殊编码方式。
hash-max-zipmap-value 512
#下面两个参数的含义基本等同于上面两个和Hash相关的参数,只是作用的对象类型为List。
list-max-ziplist-entries 512
list-max-ziplist-value 64
#如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。
set-max-intset-entries 512

인코딩된 값이 수정된 후 구성 정보의 최대 한도를 초과하면 Redis는 자동으로 이를 일반 인코딩으로 변환합니다. 이 작업은 매우 빠르지만, 이를 역으로 수행하여 큰 값의 일반 인코딩을 특수 인코딩으로 변환하는 경우 공식적으로 수행하기 전에 간단히 테스트해 보는 것이 가장 좋습니다. , 이러한 변환은 종종 매우 비효율적이기 때문입니다.

2. BIT 및 바이트 수준 작업:

Redis 2.2부터 Redis는 문자열 유형 키/값에 대해 GETRANGE/SETRANGE/GETBIT/SETBIT라는 네 가지 명령을 제공합니다. 이러한 명령을 통해 배열을 운영하는 것처럼 문자열 유형 값 데이터에 액세스할 수 있습니다.

예를 들어 사용자를 고유하게 식별하는 ID는 문자열 값의 하위 문자열일 수 있습니다. 이러한 방식으로 GETRANGE/SETRANGE 명령을 통해 쉽게 추출할 수 있습니다.

BITMAP을 사용하여 남성은 1, 여성은 0과 같이 사용자의 성별 정보를 나타낼 수도 있습니다. 이 방법을 사용하여 1억 명의 사용자의 성별 정보를 표현할 때 저장 공간은 12MB만 차지하며 동시에 SETBIT/GETBIT 명령을 통한 데이터 탐색도 매우 효율적입니다.

3. 가능한 한 해시를 사용하세요:

작은 해시 유형의 데이터가 상대적으로 작은 공간을 차지하므로 다음과 같은 필드를 포함한 사용자 등록 정보와 같은 실제 응용 프로그램에서는 가능한 한 해시 유형을 사용하는 것을 고려해야 합니다. 이름, 성별, 이메일, 나이, 비밀번호.

물론 이 정보는 Key 형태로 저장할 수 있고, 사용자가 입력한 정보는 String Value 형태로 저장됩니다. 하지만 Redis는 Hash 형태로 저장하는 것을 선호하며, 위의 정보는 Field/Value 형태로 표현됩니다.

이제 Redis의 저장 메커니즘을 학습하여 이 진술을 더욱 증명하겠습니다. 특별한 인코딩 메커니즘은 이 블로그의 시작 부분에서 언급되었으며 해시 유형과 관련된 두 가지 구성 매개변수인 hash-max-zipmap-entries와 hash-max-zipmap-value가 있습니다.

그들의 활동 범위에 대해서는 이전에 설명되었으므로 여기서는 자세히 설명하지 않겠습니다. 이제 Hash Value에 저장된 필드 수가 hash-max-zipmap-entries보다 작고, 각 요소의 길이도 hash-max-zipmap-value보다 작다고 가정해 보겠습니다. 이러한 방식으로 새로운 해시 유형 키/값 저장소가 있을 때마다 Redis는 해시 값에 대한 고정 길이 공간을 생성합니다. 사전 할당된 최대 바이트 수는 다음과 같습니다.

total_bytes = hash-max-zipmap-entries * hash-max-zipmap-value

이런 방식으로 모든 키의 위치는 다음과 같습니다. 해시의 필드는 예약되어 있으며 필드/값은 해시-최대-zipmap-값 사이의 단계 간격을 사용하여 배열처럼 무작위로 액세스할 수 있습니다.

해시 값의 필드 수나 새 요소의 길이가 각각 위의 두 매개변수 값을 초과하는 경우에만 Redis는 이를 해시 테이블 형식으로 다시 저장하는 것을 고려하고 그렇지 않으면 항상 이를 유지합니다. 효율적인 저장 및 액세스 방법.

그뿐만 아니라, 각 Key는 문자열 형식의 Key/Value에 비해 만료 시간, LRU 등과 같은 일부 관련 시스템 정보를 저장해야 하므로 Hash 형식은 Key의 개수를 크게 줄입니다(대부분의 Key가 표현되고 저장됩니다). 해시 필드 형식)을 통해 저장 공간의 사용 효율성을 더욱 최적화합니다.

더 많은 Redis 지식을 알고 싶다면 redis 데이터베이스 튜토리얼 칼럼을 주목해 주세요.

위 내용은 Redis 메모리 최적화 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제