PHP缓存系统APCu扩展的使用

admin3年前PHP教程29
目录
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扩展的资料请关注其它相关文章!

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

相关文章

gpu服务器与FpgA云服务器有什么区别美国GPU服务器有哪些方面的优点

gpu服务器(gpucloudcomputing)是基于gpu应用的计算服务,具有实时高速的并行计算和浮点计算能力,适应用于3d图形应用程序、视频解码、深度学习、科学计算等应用场景。我们提供和标准云服...

境外站群服务器有什么优势呢

现在服务器的运用范围非常的广泛,站群服务器的使用也越来越普遍,那么什么是境外站群服务器,境外站群服务器有什么优势呢?下面我们简单介绍一下。什么是境外站群服务器随着互联网技术的发展,现在很多人都建立了自...

几个选择GPU服务器的建议美国gpu服务器租用品牌有哪些

在用户购买GPU服务器之前,可能最先想到的是那些有名的大规模的服务提供商,但是价格昂贵使用户望而却步。此外,其他服务提供商也同样优秀,并且可以在价格优秀的情况下既保证了GPU服务器的质量又保证了可以充...

如何动态查看及加载PHP扩展

目录查看是否已经加载了扩展动态加载扩展测试代码:在编译并完成 php.ini 的配置之后,我们就成功的安装了一个 PHP 的扩展。不过, PHP 也为我们提供了两个在动态运行期间可以查看扩展状态以及加...

德国服务器好不好用

德国服务器好不好用?德国服务器作为服务器的一部分,好坏取决于多个因素。下面是您可以考虑的几个因素:速度和稳定性:使用德国服务器时,您需要考虑速度和稳定性。如果连接速度缓慢或不稳定,则可能会影响您的网站...

php中intval()的实例用法

1、intval()函数可以获取变量的整数值,常被用来进行数据类型转换,将字符串类型的变量转换为为整数类型。2、语法为“intval($var[,$base])”。实例2345...