略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: APCu

2024-11-13

APC 用户缓存

add a noteadd a note

User Contributed Notes 2 notes

up
19
boefje at hotmail dot com
2 years ago
To use apcu, the apcu extension has to be installed. You can find it here https://pecl.php.net/package/APCu

Note: apcu is not the same as apc!

APCu is the official replacement for the outdated APC extension. APC provided both opcode caching (opcache) and object caching. As PHP versions 5.5 and above include their own opcache, APC was no longer compatible, and its opcache functionality became useless. The developers of APC then created APCu, which offers only the object caching (read "in memory data caching") functionality (they removed the outdated opcache).

Wondering how to use apcu? The following example should give you a basic understanding.

<?php

date_default_timezone_set
('Europe/Amsterdam');

$apcuAvailabe = function_exists('apcu_enabled') && apcu_enabled();

if(
$apcuAvailabe)
{
   
//apcu_clear_cache();
   
   
$test1 = apcu_fetch('test1');
   
$test2 = apcu_fetch('test2');
}

$test1[] = rand(1, 1000);
$test2[] = rand(1, 1000);

if(
$apcuAvailabe)
{
   
apcu_store('test1', $test1);
   
apcu_store('test2', $test2);
}

echo
sprintf('current - value = %s<br/>', implode(' ,', $test1));
echo
sprintf('current - value = %s<br/>', implode(' ,', $test2));

$aPCUIterator = new APCUIterator();

echo
sprintf('totalCount = %s<br/>', $aPCUIterator->getTotalCount());
//echo sprintf('totalHits = %s<br/>', $aPCUIterator->getTotalHits()); // Not implemneted/available?
echo sprintf('totalSize = %s<br/>', $aPCUIterator->getTotalSize());

echo
'----------------------------------<br/>';

$aPCUIterator->rewind();
echo
sprintf('key = %s<br/>', $aPCUIterator->key());
echoCurrent($aPCUIterator->current());
$aPCUIterator->next();

echo
'----------------------------------<br/>';

echo
sprintf('key = %s<br/>', $aPCUIterator->key());
echoCurrent($aPCUIterator->current());
echo
sprintf('valid = %s<br/>', $aPCUIterator->valid() ? 'true' : 'false');

function
echoCurrent($current)
{
   
    echo
sprintf('current - type = %s<br/>', $current['type']);
    echo
sprintf('current - key = %s<br/>', $current['key']);
    echo
sprintf('current - value = %s<br/>', implode(' ,', $current['value']));
   
//echo sprintf('current - num_hits = %s<br/>', $current['num_hits']); // Not implemneted/available?
   
echo sprintf('current - mtime = %s<br/>', date("d-m-Y H:i:s", $current['mtime']));
    echo
sprintf('current - creation_time = %s<br/>', date("d-m-Y H:i:s", $current['creation_time']));
    echo
sprintf('current - deletion_time = %s<br/>', date("d-m-Y H:i:s", $current['deletion_time']));
    echo
sprintf('current - access_time = %s<br/>', date("d-m-Y H:i:s", $current['access_time']));
   
//echo sprintf('current - ref_count = %s<br/>', $current['ref_count']); // Not implemneted/available?
   
echo sprintf('current - mem_size = %s<br/>', $current['mem_size']);
   
//echo sprintf('current - ttl = %s<br/>', $current['ttl']); // Not implemneted/available?
}

?>
up
-5
alex at modula-shop-systems dot de
1 year ago
For PHP-FPM :
Note that all ini values are PHP_INI_SYSTEM and can't be set via php_admin_value in pool.d/xxx.conf and therefore not via different webhosting control/configuration panels.

Use /etc/php/7.x/fpm/conf.d/20-apcu.ini or /etc/php/7.x/fpm/php.ini

官方地址:https://www.php.net/manual/en/book.apcu.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3