>백엔드 개발 >PHP 튜토리얼 >PHP 공유 캐시 Yac이 APCU Memcache를 대체합니다!

PHP 공유 캐시 Yac이 APCU Memcache를 대체합니다!

藏色散人
藏色散人앞으로
2023-03-03 15:47:303093검색

이 기사는 php+yac에 대한 관련 지식을 제공합니다. 주로 APCU memcache를 Yac으로 대체하는 방법에 대해 설명합니다. 관심 있는 친구는 아래를 살펴보는 것이 모든 사람에게 도움이 되기를 바랍니다.

yac 캐시

Yac는 PHP용 공유 및 잠금 방지 메모리 사용자 데이터 캐시입니다. APC 또는 로컬 memcached를 대체하는 데 사용할 수 있습니다. Niao Ge의 제품은 고품질이어야 합니다

Requirements

PHP 7 +

Install

$/path/to/phpize
$./configure --with-php-config=/path/to/php-config
$make && make install

Note

  • Yac은 잠금이 없는 캐시이므로 여러 프로세스를 피하거나 줄여야 합니다. 동일한 키 설정 확률

  • Yac 부분 crc를 사용하면 가장 중요한(가변) 바이트를 헤드 또는 테일에 배치하도록 캐시 내용을 재배열하는 것이 좋습니다

Restrictions

  • 캐시 키 48(YAC_MAX_KEY_LEN)바이트보다 클 수 없습니다

  • 캐시 콘텐츠는 64M(YAC_MAX_VALUE_RAW_LEN)바이트보다 클 수 없습니다

  • 압축된 캐시 값은 1M 1M(YAC_MAX_VALUE_COMPRESSED_LEN)바이트보다 클 수 없습니다

ini 구성

yac.enable = 1
yac.keys_memory_size = 4M ; 4M can get 30K key slots, 32M can get 100K key slots
yac.values_memory_size = 64M
yac.compress_threshold = -1
yac.enable_cli = 0 ; 是否使用cli启用yac,默认为0
yac.serializer = php ; yac2.2.0以来,yac使用的特定seralizer json(-- enable-json) 、msgpack(-- enable-msgpack) 或igbinary(-- enable-igbinary)

constants

YAC_VERSION
YAC_MAX_KEY_LEN = 48 ; if your key is longer than this, maybe you can use md5 result as the key
YAC_MAX_VALUE_RAW_LEN = 64M
YAC_MAX_VALUE_COMPRESSED_LEN = 1M
YAC_SERIALIZER_PHP = 0   ; since yac-2.2.0
YAC_SERIALIZER_JSON = 1  ; since yac-2.2.0
YAC_SERIALIZER_MSGPACK = 2 ; since yac-2.2.0
YAC_SERIALIZER_IGBINARY = 3 ; since yac-2.2.0
YAC_SERIALIZER  ; serializer according to yac.serializer, default is YAC_SERIALIZER_PHP

cli에서 발생할 수 있는 문제에 주의하세요

cli-enable

<?php  
use Doraemon\pockets\datebase\ShareCache;
//实例化缓存封装类
$cache  = new ShareCache(&#39;test&#39;);
//设置缓存
$cache->set([1,2,3,5,6]);
//获取缓存
$a = $cache->get();


//备注 1.由于yac的缓存是共享的,所以在多个项目中使用时,需要注意key的唯一性,否则会出现缓存覆盖的情况
//备注 2.由于cli在执行后会自动退出,所以在cli中使用时,需要注意缓存的有效期,当再次执行时候换存是拿不到的
//例如

//例
//step 1
<?php
use Doraemon\pockets\datebase\ShareCache;
$cache  = new ShareCache(&#39;test&#39;);
//设置缓存
$cache->set([1,2,3,5,6]);
//php step1.php //执行后会自动退出,缓存失效

<?php
use Doraemon\pockets\datebase\ShareCache; 
//step 2
$cache  = new ShareCache(&#39;test&#39;);
//设置缓存
$arr = $cache->get();
var_dump($arr);// 空
//php step2.php //执行事后上一个进程已经退出,所以缓存失效

method

Yac::__construct

를 활성화하려면 cli를 ini로 구성해야 합니다. 으아아아

Yac 생성자에서 접두사를 지정할 수 있습니다. 이 접두사는 설정/가져오기/삭제를 수행할 때 모든 키 앞에 추가하는 데 사용됩니다.

Yac::__construct([string $prefix = ""])

Yac::set

<?php
   $yac = new Yac("myproduct_");
?>

는 값을 Yac 캐시에 저장합니다. 키는 다음과 같습니다. 캐시는 고유하므로 동일한 키를 사용하십시오. 두 번째 값을 저장하면 원래 값을 덮어쓰게 됩니다.

성공 시 true 반환, 오류 시 false 반환(메모리가 없으면 CAS 쓰기 권한을 얻을 수 없음)

   Yac::set($key, $value[, $ttl = 0])
   Yac::set(array $kvs[, $ttl = 0])

참고:

Yac 2.1과 마찬가지로 CAS 경쟁이 실패하면 실패할 수도 있습니다. 다음 작업을 수행하려면 :

<?php
$yac = new Yac();
$yac->set("foo", "bar");
$yac->set(
    array(
        "dummy" => "foo",
        "dummy2" => "foo",
        )
    );
?>

Yac::get

while (!($yac->set("important", "value")));

캐시에서 저장된 변수를 가져옵니다. 배열이 전달되면 각 요소를 가져와서 반환합니다. 성공하면 값을 반환하고, 오류가 발생하면 false를 반환합니다

 Yac::get(array|string $key[, &$cas = NULL])

Yac::delete

<?php
$yac = new Yac();
$yac->set("foo", "bar");
$yac->set(
    array(
        "dummy" => "foo",
        "dummy2" => "foo",
        )
    );
$yac->get("dummy");
$yac->get(array("dummy", "dummy2"));
?>

캐시에서 저장된 변수를 삭제합니다. 지연이 지정되면 $delay 초 후에 값이 삭제됩니다.

Yac::flush

Yac::delete(array|string $keys[, $delay=0])

모든 기존 항목을 즉시 무효화합니다. 실제로 리소스를 해제하지 않고 모든 항목을 유효하지 않은 것으로 표시할 뿐입니다.

Yac::info

Yac::flush()

캐시 ​​정보 가져오기

Yac::info(void)
<?php
  ....
  var_dump($yac->info());
  /* will return an array like:
  array(11) {
      ["memory_size"]=> int(541065216)
      ["slots_memory_size"]=> int(4194304)
      ["values_memory_size"]=> int(536870912)
      ["segment_size"]=> int(4194304)
      ["segment_num"]=> int(128)
      ["miss"]=> int(0)
      ["hits"]=> int(955)
      ["fails"]=> int(0)
      ["kicks"]=> int(0)
      ["slots_size"]=> int(32768)
      ["slots_used"]=> int(955)
  }
  */

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

위 내용은 PHP 공유 캐시 Yac이 APCU Memcache를 대체합니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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