内容提要
作者用自研PHP扩展Yac替换WordPress的Memcached对象缓存,实测吞吐提升约19%,延迟降低15%。Yac将缓存存于FPM共享内存,免去网络往返,优势恒定。文章提供安装配置方法,并指出单机场景最适合,多机集群仍需Memcached/Redis。
延伸解读
性能提升的根源:省去网络往返
文章实测显示,Yac 相比 Memcached 的吞吐提升约 19%,且不随并发变化。关键在于 Yac 将缓存存储在 FPM 共享内存中,get() 操作是进程内的一次哈希查找,而 Memcached 每次命中都需要一次 localhost TCP 往返。这种固定开销的差异,使得 Yac 在单机场景下优势恒定。
适用场景与限制
Yac 最适合单机或少量互不同步的节点,因为它是本机共享内存缓存。对于多机集群需要共享一致缓存的场景,Memcached/Redis 的网络共享反而是特性。此外,wp_cache_flush() 会清空整块 Yac 共享内存,可能影响同一 PHP 池中其他 Yac 用户的数据,使用时需谨慎。
部署与降级机制
插件激活后自动部署 drop-in,并可在后台查看状态面板。若未安装 Yac 扩展,drop-in 会退化为请求内缓存,站点仍可正常工作,这提供了平滑的降级方案。安装方式包括 PECL、PIE 或源码编译,配置时需设置内存大小等参数。
Q&A
Yac是什么?它和Memcached在缓存存储方式上有什么不同?
Yac是作者自研的PHP扩展,将缓存存储在PHP-FPM master进程创建的共享内存中,所有worker进程直接继承,无需网络通信。而Memcached是独立的缓存服务器,通过localhost TCP连接访问,存在网络往返开销。
用Yac替换WordPress的Memcached后,性能提升多少?
在作者的压测中,Yac相比Memcached吞吐量提升约19%,延迟降低约15%。具体数据:并发20时RPS从118.7提升到141.6(+19.3%),并发50时从118.5提升到140.6(+18.6%),并发100时从118.4提升到142.1(+20.1%)。
为什么Yac比Memcached快?
因为WordPress每次请求需要几十到上百次wp_cache_get,Memcached每次命中都需要一次localhost TCP往返,而Yac是进程内共享内存的一次hash查找,省去了网络开销。这个优势是固定开销,与命中率无关。
如何安装和配置WP Yac Object Cache插件?
首先安装Yac扩展(可通过PECL、PIE或源码编译),然后在php.ini中启用extension=yac.so。接着安装插件:推荐使用WP-CLI命令`wp plugin install https://github.com/laruence/wordpress-yac-cache/releases/latest/download/wp-yac-cache.zip --activate`,或从GitHub Release下载zip后在后台上传激活。激活后需在wp-config.php中添加`define('WP_CACHE', true);`和`define('WP_CACHE_KEY_SALT', '一段长随机字符串');`。可选调优参数包括yac.enable、yac.keys_memory_size和yac.values_memory_size。
Yac适合在什么场景下使用?多机集群是否适用?
Yac最适合单机场景,因为它是本机共享内存缓存,单机或少量互不同步的节点收益最大。多机集群需要共享一致缓存时,Memcached/Redis的网络共享反而是特性,因此不适用。
使用Yac时,wp_cache_flush()会有什么影响?
wp_cache_flush()会清空这台机器上的整块Yac共享内存,包括同一PHP池里其他Yac用户的数据。后台按钮有确认弹窗,操作前需谨慎。
Yac的降级机制是怎样的?
如果没装Yac扩展,drop-in会退化为请求内缓存,站点照常工作,但缓存效果会减弱。