PHP高性能缓存扩展-APCu
众所周知高性能的缓存组件有Redis和Memcached.
Redis每秒可以处理上万请求. 适合作为缓存一些热点数据. 根据二八定律
我们可以将Mysql中20%的热点数据存入Redis.
Redis存入的数据也按照二八定律
,其中20%的热点中的热点数据我们可以存入程序内.当然PHP不是很好实现.好在有Swoole这种优秀的扩展出现,
但是今天的主角不是它.
下面让我隆重介绍下今天的主角 - APCu
扩展下载地址:
http://pecl.php.net/package/APCu
在PHP5版本用的是APC,PHP7之后就是APCU.它俩是同一东西.在php.ini的配置项中都以apc开头.
不过只支持
FastCGI
模式.PHP-CLI下会失效.需要注意!
它和Memcached很相似.只能存入key-value类型.
apcu_add('key', 'value'); // 添加数据
apcu_fetch('key'); // 读取数据
还有很多命令,我们今天只以这两条为主.
更详细的介绍和配置可以访问官网:
https://www.php.net/manual/zh/apcu.configuration.php
它的缓存生命周期是整个PHP-FPM.当重启PHP-FPM时候才会清空.也就是说可以在同一PHP-FPM环境下跨文件和跨项目的使用它.
Redis在传输数据会使用网络模型.大大增加的时间.而这也是真正高并发业务的瓶颈之一.下面我们来测试下APCu和Redis的性能差
测试的服务器: 阿里云2核4G
PHP版本: 7.2.25
首先先编写一个写入数据的程序,记得在浏览器下访问一下.
// 文件名: set_data.php
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 写入redis数据
var_dump($redis->set('a', '1'));
// 写入apcu数据
var_dump(apcu_add('aa', '1'));
?>
接着编写Redis测试文件
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$start = microtime(true);
for($i=0;$i<100000;$i++) {
$redis->get('a');
}
$end = microtime(true) - $start;
var_dump($end, "内容是:{$redis->get('a')}");
?>
进行10万次get操作. 结果: float(8.415806055069) string(11) "内容是:1"
下面来测试下APCu
<?php
$start = microtime(true);
for ($i=0;$i<100000;$i++) {
apcu_fetch('aa');
}
$end = microtime(true) - $start;
var_dump($end, "内容是: ". apcu_fetch('aa'))
?>
同样10万次get操作.结果: float(0.01537013053894) string(12) "内容是: 1"
相差500多倍! OMG!剩下的大家都懂啦~至于如何更好的使用还得靠自己.我这里只是抛砖引玉~
发表评论