当前位置: 首页 > 后端技术 > PHP

我们也有自己的缓存系统:PHP的APCu扩展

时间:2023-03-30 05:59:45 PHP

肯定用过像memcached或者redis这样的缓存系统,日常缓存,或者抗流量,或者保存一些常用的热点数据。其实在小型项目中,PHP也为我们准备了一个简单的缓存系统,完全可以应付我们日常普通规模站点的开发。这组扩展是APCu扩展。APCu扩展APCu扩展是APC扩展的升级,不再维护。两组扩展实际上都是基于操作码缓存。也就是PHP自己的opcode实现的缓存能力。APCu的安装和普通的PHP扩展一样,很简单,最重要的是这个扩展还是很小的。下载和安装都可以在几秒钟内完成。因此可以非常方便的应用于小型项目,并且PHP原生支持,无需额外配置如端口等。方法说明缓存系统中通用的增删改查、自增等功能均在APCu扩展中实现。apcu_add—创建新的缓存apcu_cache_info—查看APCu的所有缓存信息apcu_cas—将缓存更新为新值启用APCu缓存apcu_entry—自动生成缓存条目apcu_exists—检查缓存是否存在apcu_fetch—查询缓存apcu_inc—增加缓存值apcu_sma_info—查询缓存共享内存信息apcu_store—保存缓存使用演示apcu_add("int",1);apcu_add("string","I'mString");apcu_add("arr",[1,2,3]);classA{私人$apc=1;函数测试(){回声“s”;}}apcu_add("obj",newA);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,mixed$var[,int$ttl=0])方法是正常添加缓存。$ttl可以设置过期时间,也是以秒为单位。如果不设置,将长期有效。注意APCu的缓存时间限制在一次CLI中有效,再次调用CLI不会得到上一次CLI设置的缓存内容。在PHP-FPM中,缓存会在重启PHP-FPM或FastCGI后失效。接下来,我们重点测试几个不太常用的方法。apcu_cas("int",1,2);var_dump(apcu_fetch("int"));//警告apcu_cas()期望参数2为intapcu_cas("string","I'mString","I'mNew细绳”);apcu_cas(string$key,int$old,int$new)是将一个$old值修改为$new值,它只能修改数字类型的内容,如果修改的是字符串,会报错.这个功能有什么好处?它最大的优点是原子性,即不受高并发的影响。它类似于apcu_store(string$key,mixed$var[,int$ttl=0])方法,但该方法只是修改缓存的内容。如果缓存的key不存在,则新建一个。它不受类型限制,当然也不是原子的。apcu_entry("entry",function($key){return"Thisis".$key;});var_dump(apcu_fetch("entry"));apcu_entry(string$key,callable$generator[,int$ttl=0])该函数的作用是如果$key的缓存不存在则执行匿名函数$generator,将$key作为key值传入,然后生成或返回一个内容作为缓存的值。var_dump(apcu_cache_info());最后,如果我们想查看当前系统中所有的APCu缓存信息,可以直接使用这个apcu_cache_info()函数。总结当缓存中数据较多时,它还提供了一个APCUIterator迭代器,方便循环查询缓存信息和相关统计信息。总之,本系统是一个非常方便的小型缓存系统,大家可以在日常开发中尝试使用一些小功能。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202004/source/%E6%88%91%E4%BB%AC%E4%B9%9F%E6%9C%89%E8%87%AA%E5%B8%A6%E7%9A%84%E7%BC%93%E5%AD%98%E7%B3%BB%E7%BB%9F%EF%BC%9APHP%E7%9A%84APCu%E6%89%A9%E5%B1%95.php参考文档:https://www.php.net/manual/zh/function.apcu-entry.php所有媒体平台均可搜索【硬核专案经理]