Skip to content

Add an APCu persistent object cache#7

Merged
batonac merged 1 commit into
mainfrom
apcu-object-cache
Jul 3, 2026
Merged

Add an APCu persistent object cache#7
batonac merged 1 commit into
mainfrom
apcu-object-cache

Conversation

@batonac

@batonac batonac commented Jul 3, 2026

Copy link
Copy Markdown
Member

WordPress issues many database queries per page, most of them cached through its object cache — which is non-persistent by default, so every request re-queries. When the database is remote (Cloudflare D1 over the SQLite driver's HTTP transport), each query is a round trip, making this the dominant page-load cost.

Add APCu to the PHP build and ship an APCu-backed object-cache.php drop-in, installed by the entrypoint as wp-content/object-cache.php (disable with WORDPRESS_OBJECT_CACHE=none). Backed by shared memory, the cache persists across all requests a container instance serves, so autoloaded options, transients, post/term/meta lookups, etc. are served from memory instead of re-querying the database.

The drop-in implements the full WP_Object_Cache contract (persistent and non-persistent groups, global groups, multi-key ops, incr/decr, grouped and runtime flushes) and self-disables when APCu is unavailable. Verified against the built image: APCu loads under ZTS, the drop-in is valid, and values persist across a runtime flush.

WordPress issues many database queries per page, most of them cached
through its object cache — which is non-persistent by default, so every
request re-queries. When the database is remote (Cloudflare D1 over the
SQLite driver's HTTP transport), each query is a round trip, making this
the dominant page-load cost.

Add APCu to the PHP build and ship an APCu-backed object-cache.php
drop-in, installed by the entrypoint as wp-content/object-cache.php
(disable with WORDPRESS_OBJECT_CACHE=none). Backed by shared memory, the
cache persists across all requests a container instance serves, so
autoloaded options, transients, post/term/meta lookups, etc. are served
from memory instead of re-querying the database.

The drop-in implements the full WP_Object_Cache contract (persistent and
non-persistent groups, global groups, multi-key ops, incr/decr, grouped
and runtime flushes) and self-disables when APCu is unavailable. Verified
against the built image: APCu loads under ZTS, the drop-in is valid, and
values persist across a runtime flush.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@batonac batonac merged commit 7c08159 into main Jul 3, 2026
1 check failed
@batonac batonac deleted the apcu-object-cache branch July 3, 2026 19:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant