什么是 PHP 中的用户级缓存 APCu 扩展?

Posted

技术标签:

【中文标题】什么是 PHP 中的用户级缓存 APCu 扩展?【英文标题】:What is userland caching APCu extension in PHP? 【发布时间】:2015-01-28 03:00:34 【问题描述】:

只是一个与OPcache有关的问题,因为我没有理解它并在Google上找到了答案:

当我们谈论用户态缓存时,它是什么意思?我知道 php 与新的 Zend OPcache 扩展预先捆绑在一起,并且该扩展将操作代码缓存到 ram 中,以免对处理器造成太大压力,该处理器应在每次请求时将 PHP 源转换为操作代码, 但是当他们说 APCu 实现了用户级缓存时呢?

什么是用户态缓存?是否可以将 APCu 和 Zend OPcache 保持在一起?是否应该使用 Zend OPcache 代替 APCu?

【问题讨论】:

【参考方案1】:

APCu 是由 Joe Watkins 为响应 OPcache 而开发的。 APC 支持操作码缓存和数据缓存,但自 PHP 5.4 以来一直存在支持操作码缓存的稳定性问题。 Zend Inc 开放 Opcache 的源代码并将其置于 PHP 许可证下后,它成为 PHP 5.5 以来的核心和首选操作码缓存。 但是它只支持操作码缓存,不支持数据缓存。

Joe 的 APCu 本质上是 APC 的剥离版本,仅包含数据缓存代码,旨在与 OpCache 一起使用如果您需要数据缓存。

请注意,虽然操作码缓存在源代码级别是透明的,但数据缓存不是。您的应用程序需要显式编码才能使用它。 (虽然 Wordpress、Drupal、phpBB、MediaWiki 等标准 PHP 应用程序默认包含此支持)。

【讨论】:

那么APCu实现了像Memcached缓存系统一样的内存数据缓存功能?我说的对吗? 类似但不同的是,Memcached 是进程外的并且支持 RPC,因此它是可集群的并且本质上更具可扩展性——尽管每次调用的开销更大。 APCu 使用共享内存区域和 PostgreSQL 自旋锁库,因此大多数 API 调用都在进程内,无需等待,因此非常轻量级——但无法在服务器之外扩展。 感谢您的回复和解释! 自旋锁是一个选项,而不是默认选项。 rwlocks 是默认的,互斥锁回退到那个,自旋锁回退到处理共享互斥锁。 感谢乔的澄清。我是凭记忆回答的。如果 pthreads 可用,则使用 pthread rwlocks 并且仅回退到 PostgreSWL 代码而不使用它。无论哪种方式,大多数 API 调用都是在进程中,没有等待,因此非常轻量级的一般评论 - 但在服务器之外不可扩展仍然适用:)

以上是关于什么是 PHP 中的用户级缓存 APCu 扩展?的主要内容,如果未能解决你的问题,请参考以下文章

php 缓存之 APC 和apcu

php 带密钥和ttl的APCu缓存

如果新版本的脚本正在运行,如何清除 PHP APCu 缓存?

PHP apcu 在 Laravel 排队/分派作业中不持久

《深入探究 php-apcu 实现原理》-- 第一回:apcu的简介优缺点及使用场景

php纯静态化技术之ob缓存详解