多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 概述 PHP APCu(Advanced and Performance Caching User Cache)是一个用于共享内存的缓存系统,它提供了一个用户缓存机制,可以被PHP应用程序用来缓存数据。APCu是APC(Alternative PHP Cache)的一个分支,专为PHP 5.5及以上版本设计,并且不包含APC的OPcache功能。 ## 特性 1. **共享内存缓存**:APCu使用共享内存来存储缓存数据,这意味着多个PHP进程可以访问相同的缓存数据,从而提高性能。 2. **用户缓存**:与APC的系统缓存不同,APCu专注于用户缓存。这意味着它主要用于存储用户会话数据和应用程序级别的缓存,而不是编译后的PHP代码。 3. **易于使用**:APCu提供了一组简单的函数来存储和检索缓存数据。例如,`apcu_store()`、`apcu_fetch()`、`apcu_delete()`等。 4. **性能提升**:通过缓存经常访问的数据,APCu可以显著减少数据库查询和文件I/O操作,从而提高应用程序的性能。 5. **内存管理**:APCu会自动管理缓存的内存使用,当内存不足时,它会根据需要自动清理旧的缓存数据。 6. **安全性**:APCu的缓存数据是进程隔离的,这意味着不同的PHP进程不能访问彼此的缓存数据,从而提高了安全性。 7. **配置**:可以通过`php.ini`文件配置APCu的相关参数,例如缓存大小、清理策略等。 ## 安装 下载源码包并解压 ``` wget https://pecl.php.net/get/apcu-5.1.23.tgz tar -zxvf apcu-5.1.23.tgz ``` 编译 ``` cd apcu-5.1.23 /usr/local/php-7.4/bin/phpize ``` 执行以下命令 ``` ./configure --with-php-config=/usr/local/php-7.4/bin/php-config ``` 可能会报错 ``` checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for a sed that does not truncate output... /bin/sed checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for cc... cc checking whether the C compiler works... no configure: error: in `/home/www/build/apcu-5.1.23': configure: error: C compiler cannot create executables See `config.log' for more details ``` 查看错误日志`config.log` ``` compilation terminated. configure:2894: $? = 1 configure:2914: checking whether the C compiler works configure:2936: cc conftest.c >&5 cc1: error: /usr/local/include/x86_64-linux-gnu: Permission denied configure:2940: $? = 1 configure:2978: result: no configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | /* end confdefs.h. */ | | int | main () | { | | ; | return 0; | } configure:2983: error: in `/home/www/build/apcu-5.1.23': configure:2985: error: C compiler cannot create executables See `config.log' for more details ``` 可以看出`error: /usr/local/include/x86_64-linux-gnu: Permission denied` 这个提示语表示没有权限操作 解决方案使用`sudo`操作解决问题 ``` sudo ./configure --with-php-config=/usr/local/php-7.4/bin/php-config ``` 编译安装 ``` sudo make -j4 sudo make install ``` 如果没有报错,查看扩展是否安装成功 ```ts ls -l /usr/local/php-7.4/lib/php/extensions/no-debug-non-zts-20190902/ total 183804 -rwxr-xr-x 1 root root 650472 Jul 24 09:34 apcu.so -rwxr-xr-x 1 root root 1033840 Mar 17 2021 event.so -rwxr-xr-x 1 root root 275008 Jul 2 11:01 gmssl.so -rw-r--r-- 1 root root 131697456 Feb 25 2022 grpc.so -rwxr-xr-x 1 root root 6252494 Mar 17 2021 opcache.a -rwxr-xr-x 1 root root 2894784 Mar 17 2021 opcache.so -rw-r--r-- 1 root root 1274552 Feb 25 2022 protobuf.so -rwxr-xr-x 1 root root 2215880 Jun 14 19:12 rar.so -rwxr-xr-x 1 root root 697352 Feb 22 2022 rdkafka.so -rwxr-xr-x 1 root root 2850040 Mar 17 2021 redis.so -rwxr-xr-x 1 root root 37484536 May 23 09:58 swoole.so -rwxr-xr-x 1 root root 24176 May 2 11:38 utils.so -rwxr-xr-x 1 root root 154120 Apr 21 2023 xhprof.so -rwxr-xr-x 1 root root 684928 May 2 09:25 zephir_parser.so ``` 配置APCu扩展 ``` sudo vim /usr/local/php-7.4/etc/php.ini ``` 增加以下配置 ``` [apcu] extension = apcu.so apc.shm_size = 1024M ``` 校验配置是否有效 ``` php -i |grep apcu apcu OLDPWD => /home/www/build/apcu-5.1.23/build PWD => /home/www/build/apcu-5.1.23 $_SERVER['OLDPWD'] => /home/www/build/apcu-5.1.23/build $_SERVER['PWD'] => /home/www/build/apcu-5.1.23 ``` ## 简单使用 进行读写 ``` <?php $start = microtime(true); for ($i = 0; $i < 10000; $i++) { $key = 'apcu' . $i; apcu_add($key, $i); apcu_fetch($key); } echo microtime(true) - $start . PHP_EOL; ``` * `apcu_add(key, val, ttl)` 设置值,注意,缓存有值的情况下无法设置值,类比Redis的setnx,类型支持标量、数组、与对象,这一点非常好。 * `apcu_fetch(key)` 取缓存,获取不到返回false,并发情况下容易返回false 执行 ``` php apcu.php 0.0011260509490967 ``` https://www.cnblogs.com/phpphp/p/18200989 ## Redis压测对比连接性能 | 方式 | 轮次 | APCu耗时(秒) | Redis耗时(秒) | | --- | --- | --- | --- | | 只读 | 10000 | 0.011 | 1.162 | | 只写 | 10000 | 0.012 | 1.062 | | 读写,一次new Redis | 10000 | 0.011 | 2.117 | | 读写,多次new Redis | 10000 | 0.011 | 3.646 | ~~~php 只读(APCu): ~~~