>  기사  >  백엔드 개발  >  PHP를 위한 또 다른 효율적인 캐싱 확장인 Yac에 대한 자세한 소개

PHP를 위한 또 다른 효율적인 캐싱 확장인 Yac에 대한 자세한 소개

醉折花枝作酒筹
醉折花枝作酒筹앞으로
2021-06-03 17:42:001916검색

이 글에서는 또 다른 효율적인 PHP 캐시 확장 기능인 Yac에 대해 자세히 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP를 위한 또 다른 효율적인 캐싱 확장인 Yac에 대한 자세한 소개

이전 기사에서 우리는 이미 PHP와 함께 제공되는 확장 캐시 Apc에 대해 배웠습니다. 오늘은 또 다른 캐시 확장인 Yac에 대해 알아 보겠습니다.

Yac이란 무엇입니까

실제로 이름에서 이것이 거장 Niao Ge의 또 다른 작품임을 알 수 있습니다. 결국, 그는 PHP의 핵심 개발자이고 그의 작업은 결코 우리를 실망시키지 않습니다. Niao 형제는 우리 중국 프로그래머들의 자부심이라고 할 수 있습니다. 그는 PHP 세계에서 결정적인 역할을 하고 있습니다. 그의 블로그는 업데이트 빈도가 높지는 않지만 모든 기사를 배울 가치가 있습니다.

Yac은 잠금이 없는 공유 캐시 시스템이므로 매우 효율적입니다. Apc는 Memcached보다 2배 이상 효율적이고 Yac은 Apc보다 빠릅니다. 이것이 가장 큰 특징입니다.

Memcached나 Redis에 비해 Yac은 서버에 다른 소프트웨어를 설치할 필요가 없으며 이 확장 프로그램만 설치하면 됩니다. 소규모 시스템, 특히 단순히 데이터를 캐시하는 시스템의 경우 복잡한 데이터 유형이 필요하지 않습니다. 이러한 프로그래밍 언어 확장을 사용하면 개발이 더 편리하고 빨라질 수 있습니다.

설치 방법도 매우 간단합니다. PECL에서 설치 패키지를 다운로드한 후 확장 프로그램을 설치하면 됩니다.

기본 작업

캐시 관련 작업은 캐시 추가, 수정, 삭제에 불과합니다. 외부 캐싱 시스템과 달리 배열이나 객체를 저장할 때 PHP 확장 클래스의 캐시는 이러한 데이터 유형을 문자열로 직렬화하거나 JSON 문자열로 변환하지 않고 직접 저장할 수 있다는 점이 Apc 및 Yac의 장점 중 하나입니다.

캐시 추가 및 가져오기

$yac = new Yac();
$yac->add('a', 'value a');
$yac->add('b', [1,2,3,4]);

$obj = new stdClass;
$obj->v = 'obj v';
$yac->add('obj', $obj);


echo $yac->get('a'), PHP_EOL; // value a
echo $yac->a, PHP_EOL; // value a


print_r($yac->get('b'));
// Array
// (
//     [0] => 1
//     [1] => 2
//     [2] => 3
//     [3] => 4
// )

var_dump($yac->get('obj'));
// object(stdClass)#3 (1) {
//     ["v"]=>
//     string(5) "obj v"
// }

매우 간단한 작업으로 Yac 클래스만 인스턴스화하면 add() 메서드와 get() 메서드를 통해 캐시 콘텐츠를 추가하고 가져올 수 있습니다.

Yac 확장은 __set() 및 __get() 매직 메서드도 재정의하므로 변수를 조작하여 캐시를 직접 조작할 수 있습니다.

다음으로 info() 함수를 통해 현재 캐시된 상태 정보를 볼 수 있습니다.

print_r($yac->info());
// Array
// (
//     [memory_size] => 71303168
//     [slots_memory_size] => 4194304
//     [values_memory_size] => 67108864
//     [segment_size] => 4194304
//     [segment_num] => 16
//     [miss] => 0
//     [hits] => 4
//     [fails] => 0
//     [kicks] => 0
//     [recycles] => 0
//     [slots_size] => 32768
//     [slots_used] => 3
// )

캐시 ​​설정

$yac->set('a', 'new value a!');
echo $yac->a, PHP_EOL; // new value a!

$yac->a = 'best new value a!';
echo $yac->a, PHP_EOL; // best new value a!

set() 함수는 현재 캐시 키가 존재하지 않는 경우 캐시의 내용을 수정하는 것입니다.

캐시 삭제

$yac->delete('a');
echo $yac->a, PHP_EOL; // 

$yac->flush();
print_r($yac->info());
// Array
// (
//     [memory_size] => 71303168
//     [slots_memory_size] => 4194304
//     [values_memory_size] => 67108864
//     [segment_size] => 4194304
//     [segment_num] => 16
//     [miss] => 1
//     [hits] => 6
//     [fails] => 0
//     [kicks] => 0
//     [recycles] => 0
//     [slots_size] => 32768
//     [slots_used] => 0
// )

단일 캐시를 삭제하려면 delete() 함수를 직접 사용하여 이 캐시의 내용을 삭제할 수 있습니다. 전체 캐시 공간을 지우려면 플러시()를 직접 사용하여 전체 캐시 공간을 지울 수 있습니다.

Alias ​​space

위에서 캐시 공간에 대해 언급했습니다. 실제로 Yac을 인스턴스화할 때 기본 Yac 클래스 생성자에 별칭 구성을 전달할 수 있습니다. 이러한 방식으로 서로 다른 Yac 인스턴스는 서로 다른 네임스페이스에 배치되는 것과 동일하며 서로 다른 공간에 있는 동일한 키의 캐시는 서로 영향을 미치지 않습니다.

$yacFirst = new Yac();
$yacFirst->a = 'first a!';;

$yacSecond = new Yac();
$yacSecond->a = 'second a!';

echo $yacFirst->a, PHP_EOL; // second a!
echo $yacSecond->a, PHP_EOL; // second a!

이 코드에서는 기본 인스턴스화된 Yac 개체를 사용하고 있습니다. 별도로 인스턴스화되지만 저장되는 공간은 동일하므로 동일한 변수가 서로 덮어쓰게 됩니다.

$yacFirst = new Yac('first');
$yacFirst->a = 'first a!';;

$yacSecond = new Yac('second');
$yacSecond->a = 'second a!';

echo $yacFirst->a, PHP_EOL; // first a!
echo $yacSecond->a, PHP_EOL; // second a!

다른 인스턴스화 매개변수를 사용하면 동일한 매개변수가 서로 영향을 미치지 않으며 서로 다른 공간에 저장됩니다. 즉, Yac은 자동으로 이러한 키에 접두사를 추가합니다.

캐시 에이징

마지막으로 캐시 시스템은 캐시된 콘텐츠에 대해 에이징 제한을 적용합니다. 만료 시간이 지정되면 캐시된 콘텐츠는 지정된 시간 이후에 만료됩니다.

$yac->add('ttl', '10s', 10);
$yac->set('ttl2', '20s', 20);
echo $yac->get('ttl'), PHP_EOL; // 10s
echo $yac->ttl2, PHP_EOL; // 20s

sleep(10);

echo $yac->get('ttl'), PHP_EOL; // 
echo $yac->ttl2, PHP_EOL; // 20s

위 코드의 ttl 캐시는 만료 시간을 10초로만 설정하므로 10초의 sleep() 이후에는 출력 ttl에 내용이 없습니다.

시간 설정은 설정하지 않으면 오랫동안 유효하며, 만료 시간은 __set() 메서드를 사용하여 설정할 수 없으며 set() 또는 add() 함수만 사용할 수 있습니다. 만료 시간을 설정합니다.

요약

Yac 확장은 어떻습니까? Yac 확장이 우리 APC만큼 편리하고 사용하기 쉬운가요? 물론 더 중요한 것은 성능과 적용 가능한 시나리오입니다. 소규모 시스템, 특히 시스템 구성이 그다지 강력하지 않은 운영 환경의 경우 이 확장된 캐시 시스템을 사용하면 개발이 더 빠르고 편리해질 수 있습니다. 잠금 없는 공유의 개념에 대해서는 Niao 형제의 기사에 대한 자세한 설명인 아래 참조 문서의 두 번째 링크를 참조할 수 있습니다.

테스트 코드:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/PHP%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E9%AB%98%E6%95%88%E7%BC%93%E5%AD%98%E6%89%A9%E5%B1%95%EF%BC%9AYac.php

추천 학습: php 비디오 튜토리얼

위 내용은 PHP를 위한 또 다른 효율적인 캐싱 확장인 Yac에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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