Memcached의 메모리 할당은 페이지 단위입니다. 기본적으로 1페이지는 1M으로 지나갈 수 있습니다. -I 매개변수는 시작 시 지정됩니다. 메모리 신청이 필요한 경우 memcached가 새 페이지를 나누어 필요한 slab 영역에 할당합니다. 한 번 할당된 페이지는 다시 시작하기 전에 재활용되거나 재할당되지 않습니다.
Memcached와 모든 크기의 데이터를 하나로 모으는 대신 데이터 공간을 미리 일련의 슬래브로 나누어 각 슬래브는 특정 범위 내의 데이터 저장만 담당합니다. 아래 그림과 같이 각 슬래브에는 이전 슬래브의 크기보다 크고 자체 최대 크기보다 작거나 같은 데이터만 저장됩니다. 예를 들어 슬래브 3은 137~224바이트의 데이터만 저장합니다. 데이터 크기가 230byte라면 slab 4에 할당됩니다. 아래 그림에서 볼 수 있듯이 각 슬래브가 담당하는 공간은 실제로 동일하지 않습니다. memcached는 기본적으로 다음 슬래브의 최대값이 이전 슬래브의 1.25배로 수정될 수 있습니다.
증가율을 수정하려면 -f 매개변수를 변경하십시오.
Chunk는 고정된 메모리 공간의 연속이다. 이 크기는 이를 관리하는 슬래브의 최대 저장 크기이다. 예를 들어, 슬래브 1의 모든 청크는 104바이트이고, 슬래브 4의 모든 청크는 280바이트입니다. 청크는 Memcached가 실제로 캐시된 데이터를 저장하는 곳입니다. 청크 크기는 슬랩이 저장할 수 있는 최대값으로 고정되어 있으므로 현재 슬랩에 할당된 모든 데이터를 청크에 저장할 수 있습니다. 시간 데이터 크기가 청크 크기보다 작을 경우 여유 공간이 유휴 상태가 됩니다. 이는 메모리 조각화를 방지하기 위한 것입니다. 예를 들어, 아래 그림에서 Chunk
크기는 224byte이고, 저장되는 데이터는 200byte이고 나머지 24byte는 유휴 상태입니다.
Memcached는 시작 시 -m을 통해 최대 메모리 사용량을 지정하지만 이는 시작하자마자 점유되지 않으며 필요에 따라 각 슬래브에 점진적으로 할당됩니다.
새 캐시 데이터를 저장하려면 먼저 적절한 슬래브를 선택한 다음 슬래브에 사용 가능한 청크가 있는지 확인하고 없으면 직접 저장합니다. 신청됩니다. 슬래브는 페이지 단위로 메모리를 적용하기 때문에 첫 번째 데이터를 넣으면 크기에 관계없이 1M 페이지가 슬래브에 할당됩니다. 페이지를 신청한 후, slab은 청크의 크기에 따라 이 페이지의 메모리를 나누어 청크의 배열이 되고, 청크 배열 중 하나를 선택하여 데이터를 저장하게 됩니다. 아래 그림과 같이 슬래브 1과 슬래브
2 페이지를 할당하고 해당 크기에 따라 청크 배열로 나눕니다.
위의 소개에 따르면 memcached의 메모리 할당 전략은 슬랩 요구 사항에 따라 페이지를 할당하고 각 슬랩은 필요에 따라 청크 저장소를 사용하는 것입니다.
여기서 주목해야 할 몇 가지 기능이 있습니다:
위에서는 Memcache 메모리 할당 메커니즘을 소개했으며 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.