PHP缓存系统APCu扩展的使用

 更新时间:2021年04月29日 09:41:29   作者:硬核项目经理  
这篇文章主要介绍了PHP缓存系统APCu扩展的使用,帮助大家更好的理解和学习使用php,感兴趣的朋友可以了解下

想必大家都使用过 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.com/zhangyue050…

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

相关文章

  • 自己写的兼容低于PHP 5.5版本的array_column()函数

    自己写的兼容低于PHP 5.5版本的array_column()函数

    这篇文章主要介绍了自己写的兼容低于PHP 5.5版本的array_column()函数,array_column是PHP 5.5新增函数,有时在低版本中也可能要用到,需要的朋友可以参考下
    2014-10-10
  • PHPExcel导出2003和2007的excel文档功能示例

    PHPExcel导出2003和2007的excel文档功能示例

    这篇文章主要介绍了PHPExcel导出2003和2007的excel文档功能,结合实例形式分析了PHPExcel属性设置及文档导出操作相关技巧,需要的朋友可以参考下
    2017-01-01
  • php中explode函数用法分析

    php中explode函数用法分析

    这篇文章主要介绍了php中explode函数用法,实例分析了explode函数分割字符串及获取文件后缀名等应用,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 一个经典实用的PHP图像处理类分享

    一个经典实用的PHP图像处理类分享

    这篇文章主要介绍了一个经典实用的PHP图像处理类分享,本文提供的PHP图像操作类可以满足网站中的大部分功能需求,如图片的缩放、加水印和裁剪等功能,需要的朋友可以参考下
    2014-11-11
  • 如何在php中正确的使用json

    如何在php中正确的使用json

    以下是对在php中正确使用json的方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • CentOS7系统搭建LAMP及更新PHP版本操作详解

    CentOS7系统搭建LAMP及更新PHP版本操作详解

    这篇文章主要介绍了CentOS7系统搭建LAMP及更新PHP版本操作,总结分析了CentOS7系统搭建LAMP及更新PHP版本操作相关原理、步骤、操作命令与注意事项,需要的朋友可以参考下
    2020-03-03
  • PHP基于递归实现的约瑟夫环算法示例

    PHP基于递归实现的约瑟夫环算法示例

    这篇文章主要介绍了PHP基于递归实现的约瑟夫环算法,结合实例形式较为详细的分析了约瑟夫环问题与php使用递归算法的解决方法,需要的朋友可以参考下
    2017-08-08
  • ThinkPHP5中Request请求对象大全

    ThinkPHP5中Request请求对象大全

    ThinkPHP5可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量,以及文件上传信息,如果要获取当前的请求信息,可以使用\think\Request类
    2024-08-08
  • PHP实现汉字转拼音类库的使用方法

    PHP实现汉字转拼音类库的使用方法

    这篇文章主要为大家介绍了PHP实现汉字转拼音类库使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • PHP请求远程地址设置超时时间的解决方法

    PHP请求远程地址设置超时时间的解决方法

    下面小编就为大家带来一篇PHP请求远程地址设置超时时间的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10

最新评论