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

30
关于 OPcache 的问题,我不是很明白并且在谷歌上也找不到答案:
当我们谈论用户空间缓存时,这是什么意思?我知道 PHP 已经预先绑定了最新的 Zend OPcache 扩展,该扩展将 op 代码缓存在 RAM 中,以避免过多地使用处理器,该处理器应该在每个请求中将 PHP 源转换为 op 代码, 但是当他们说 APCu 实现了用户空间缓存时,它是指什么?用户空间缓存是什么?是否可以同时使用 APCu 和 Zend OPcache?还是应该使用 Zend OPcache 而不是 APCu?
1个回答

34

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

实质上,Joe的APCu是APC的削减版,只包括数据缓存代码,并旨在与OpCache一起使用(如果您需要数据缓存)。

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


3
APCu实现了类似于Memcached缓存系统的内存数据缓存功能,我的理解是否正确? - tonix
7
Memcached和APCu相似但又有所不同。其中,Memcached是一个独立的进程,并具备RPC功能,因此可以进行集群化并天然更具可扩展性——尽管每次调用的开销较大。而APCu使用共享内存区域和PostgreSQL自旋锁库,因此大多数API调用都在进程内完成,无需等待,因此非常轻量级——但不适用于服务器外的情形。 - TerryE
感谢您的回复和解释! - tonix
3
自旋锁是一种可选项,而不是默认选项。读写锁是默认选项,互斥锁则会回退到读写锁,自旋锁会回退到进程共享互斥锁。 - Joe Watkins
感谢您的澄清,乔。我是凭记忆回答的。如果有pthread,则使用pthread rwlocks,否则回退到PostgreSQL代码。无论哪种方式,一般评论都是大多数API调用在进程内部且没有等待,因此非常轻量级 - 但在服务器外不可扩展 :) - TerryE
你的应用程序需要显式编码才能使用它。这听起来有点像魔术。据我了解,APCu缓存必须作为PECL扩展进行“安装”。可以使用APCu函数按键保存(高速缓存)和加载值:apcu_add('foo', $bar) ... apcu_fetch('foo') - goulashsoup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接