PHP缓存系统APCu扩展的使用

admin3年前PHP教程60
目录
APCu 扩展方法说明使用演示总结

想必大家都使用过 memcached 或者 redis 这类的缓存系统来做日常的缓存,或者用来抗流量,或者用来保存一些常用的热点数据,其实在小项目中,PHP 也已经为我们准备好了一套简单的缓存系统,完全能够应付我们日常普通规模站点的开发。这一套扩展就是 APCu 扩展。

APCu 扩展

APCu 扩展是 APC 扩展的升级,APC 扩展已经不维护了。这两套扩展其实都是基于 opcode caching 。也就是 PHP 自身的 opcode 来实现的缓存能力。

APCu 的安装就和普通的 PHP 扩展一样,非常简单,最主要的是这个扩展还非常的小。不管下载还是安装都是秒级可以完成的。所以说能够非常方便的应用于小规模的项目,而且是 PHP 原生支持的,不需要额外的端口之类的配置。

方法说明

缓存系统一般都会有的增加、删除、查询、自增等功能都在 APCu 扩展中有对应的实现。

apcu_add — 创建一个新的缓存apcu_cache_info — 查看 APCu 的全部缓存信息apcu_cas — 更新一个缓存的值为新值apcu_clear_cache — 清除全部的缓存apcu_dec — 自减缓存值apcu_delete — 删除一个缓存的内容apcu_enabled — 当前环境下是否启用 APCu 缓存apcu_entry — 原子地生成一个缓存实体apcu_exists — 检查缓存是否存在apcu_fetch — 查询缓存apcu_inc — 自增缓存值apcu_sma_info — 查询缓存的共享内存信息apcu_store — 保存一个缓存使用演示
apcu_add("int", 1);
apcu_add("string", "I'm String");
apcu_add("arr", [1,2,3]);
 
class A{
    private $apc = 1;
    function test(){
        echo "s";
    }
}
 
apcu_add("obj", new A);
 
var_dump(apcu_fetch("int"));
var_dump(apcu_fetch("string"));
var_dump(apcu_fetch("arr"));
var_dump(apcu_fetch("obj"));

正常的使用都是比较简单的,我们添加各种类型的数据都可以正常存入缓存。不过需要注意的是,我们可以直接保存对象进入 APCu 缓存中,不需要将它序列化或者JSON成字符串,系统会自动帮我们序列化。

apcu_add(string \key , mixedkey,mixedvar [, int ttl = 0 ]) 方法就是普通的添加一个缓存,ttl=0])方法就是普通的添加一个缓存,ttl 可以设置过期时间,也是以秒为单位,如果不设置就是长期有效的。注意,APCu 的缓存时限在一次 CLI 中有效,再调用一次 CLI 取不到上次 CLI 中设置的缓存内容。而在 PHP-FPM 中,重启 PHP-FPM 或 FastCGI 之后缓存会失效。

接下来我们重点测试一下几个不太常见的方法。


apcu_cas("int", 1, 2);
var_dump(apcu_fetch("int"));
 
// Warning  apcu_cas() expects parameter 2 to be int
apcu_cas("string", "I'm String", "I'm  New String");

apcu_cas(string $key , int $old , int $new) 是将一个 $old 值修改为 $new 值,它只能修改数字类型的内容,如果是字符串的修改会报错。这个函数有什么优势呢?它最大的优势是原子性的,也就是不受高并发的影响。与之类似的是 apcu_store(string $key , mixed $var [, int $ttl = 0 ]) 方法,不过这个方法只是简单的修改一个缓存的内容,如果这个缓存的键不存在的话,就新建一个,它不受类型的限制,当然也不具有原子性。


apcu_entry("entry", function($key){
    return "This is " . $key;
});
var_dump(apcu_fetch("entry"));

apcu_entry(string $key , callable $generator [, int $ttl = 0 ]) 这个函数的作用是如果 $key 这个缓存不存在,则执行 $generator 这个匿名函数,并将 $key 做为键值传递进去,然后生成也就是 return 一个内容做为这个缓存的值。


var_dump(apcu_cache_info());

最后,如果我们想查看当前系统中的所有 APCu 缓存信息的时候,直接用这个 apcu_cache_info() 函数即可。

总结

当缓存中的数据非常多时,它还提供了一个 APCUIterator 迭代器方便我们进行缓存信息的循环查询及相关统计。总之,这一套系统是非常方便的一套小规模的缓存系统,在日常开发中完全可以尝试用到一些小功能上。

测试代码:

github/zhangyue050…

以上就是PHP缓存系统APCu扩展的使用的详细内容,更多关于PHP缓存系统APCu扩展的资料请关注其它相关文章!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

浅谈PHP设计模式之对象池模式Pool

目录目的UML 类图代码测试目的在初始化实例成本高,实例化率高,可用实例不足的情况下,对象池可以极大地提升性能。在创建对象(尤其是通过网络)时间花销不确定的情况下,通过对象池在可期时间内就可以获得所需...

租用美国站群服务器提升网站优化的优点

美国站群服务器是应对现在搜索引擎算法规则不断地更新和完善,以及网站seo提升要求也越来越严格的情况下的解决方案,客户可以根据实际操作许多网站互相链接从而让美国站群服务器网站超过更好的排名效果。而搭建提...

香港高防服务器购买选择需要考虑什么

香港高防服务器购买选择需要考虑什么?在购买香港高防服务器时,需要考虑以下几个因素:防御能力:选择高防服务器时,需要关注其防御能力是否能够满足自身业务的安全需求。防御能力包括攻击的种类、攻击的峰值、防御...

gpu服务器适合什么运算美国GPU服务器适合哪些行业购买

现在许多企业早已了解到GPU规模性并行计算产生的优点,刚开始用强劲的多GPU服务器虚拟机各种各样方位的科学研究。那么GPU服务器是干什么的?gpu服务器适合什么运算?什么是GPU服务器GPU计算是使用...

怎么判断江西GPU服务器哪个好

判断GPU服务器哪个好,需要考虑以下几个因素:GPU类型和数量:选择适合您工作负载需求的GPU类型和数量。例如,如果您需要进行深度学习任务,则NVIDIATeslaV100或A100GPU可能是最佳选...

海外站群服务器有哪些优势

现今站长在做网站优化时,更喜欢站群服务器,可以提供很ip比较多的资源,利于网站收录。不过由于国内的ip资源有限,海外站群服务器成为站长的热门选择,今天分享一下海外站群服务器有哪些优势?1、拥有丰富的I...