前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP源码编译安装APCu扩展实现数据缓存

PHP源码编译安装APCu扩展实现数据缓存

作者头像
Tinywan
发布2024-07-30 16:11:19
1140
发布2024-07-30 16:11:19
举报
文章被收录于专栏:开源技术小栈

概述

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的相关参数,例如缓存大小、清理策略等。

安装

下载源码包并解压

代码语言:javascript
复制
wget https://pecl.php.net/get/apcu-5.1.23.tgz
tar -zxvf apcu-5.1.23.tgz

编译

代码语言:javascript
复制
cd apcu-5.1.23
/usr/local/php-7.4/bin/phpize

执行以下命令

代码语言:javascript
复制
./configure --with-php-config=/usr/local/php-7.4/bin/php-config

可能会报错

代码语言:javascript
复制
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

代码语言:javascript
复制
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操作解决问题

代码语言:javascript
复制
sudo ./configure --with-php-config=/usr/local/php-7.4/bin/php-config

编译安装

代码语言:javascript
复制
sudo make -j4
sudo make install

如果没有报错,查看扩展是否安装成功

代码语言:javascript
复制
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扩展

代码语言:javascript
复制
sudo vim /usr/local/php-7.4/etc/php.ini

增加以下配置

代码语言:javascript
复制
[apcu]
extension = apcu.so
apc.shm_size = 1024M

校验配置是否有效

代码语言:javascript
复制
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

简单使用

进行读写

代码语言:javascript
复制
<?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 执行
代码语言:javascript
复制
php apcu.php 
0.0011260509490967

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 特性
  • 安装
  • 简单使用
  • Redis压测对比连接性能
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档