{eac}ObjectCache – a persistent object cache using SQLite & APCu to cache WordPress objects.
The {eac}ObjectCache is a light-weight and very efficient drop-in persistent object cache that uses a fast SQLite database and even faster APCu shared memory to cache WordPress objects.
Solid choice
{eac}ObjectCache is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites, is rated 5/5 and was last updated 2 weeks ago, and scores 73/100 on our health check.
- Actively developed — last update 2 weeks ago
- Tested with the latest WordPress (7.1)
- Small user base (10+ active installs)
- Very few reviews so far
- Needs PHP 8.1 or newer
How does it stack up?
Side-by-side on installs, updates, ratings & supportDaily downloads
Download spikes usually follow a new release — each site that auto-updates counts as a download.
Rankings
Where {eac}ObjectCache stands todayWordPress.org search rankings
Live position in the plugin search, top 100| Keyword | Position |
|---|---|
| apcu | #9 |
| object cache | #40 |
| persistent object cache | #14 |
| SQLite | #8 |
| WP Cache | >100 |
Version adoption
Share of active sites per release.
Rating breakdown
★★★★★★★★★★ 5 from 2 reviews
About {eac}ObjectCache
From the official readme · v2.1.4Description
The {eac}ObjectCache is a light-weight and very efficient drop-in persistent object cache that uses a fast SQLite database and even faster APCu shared memory to cache WordPress objects.
See The WordPress Object Cache
The WordPress Object Cache is used to save on trips to the database. The Object Cache stores all of the cache data to memory and makes the cache contents available by using a key, which is used to name and later retrieve the cache contents.
By default, the object cache is non-persistent. This means that data stored in the cache resides in memory only and only for the duration of the request. Cached data will not be stored persistently across page loads unless you install a persistent caching plugin.
Here, an object is any piece of data – a number, text, a set of database records, an API response, etc. – that can be referenced by a name or key. Objects are categorized by a group name. Groups help identify what an object is and how it is used.
{eac}ObjectCache replaces the default WordPress object cache to not only store data in process memory but to also store data persistently, across requests, in APCu shared memory and/or in a SQLite database, increasing the likelihood of cache hits and decreasing the need for costly computations, complex MySQL database queries, and remote API requests.
SQLite is a fast, small, single-file relational database engine. By using SQLite to store objects, {eac}ObjectCache is able to manage a relatively large amount of data (groups, keys, and values) in a very efficient and fast data-store.
APCu is a shared, in-memory, persistent cache available only when the APCu PECL Extension is installed. {eac}ObjectCache uses APCu as an intermediate cache between the L1 memory cache and the L2 SQLite database cache providing extremely fast object retrieval,
{eac}ObjectCache always uses per-request, in-memory caching and may operate with either APCu memory caching or SQLite database caching – or both. APCu memory caching uses a single block of memory shared by all PHP requests and is persistent until and unless the cache is cleared or the server is rebooted (or PHP restarted). SQLite database caching is persistent until and unless the cache is deliberately cleared.
Features
- Lightweight, efficient, and fast!
- L1 (in-process memory) and L2 (APCu & SQLite) caching.
- Supports Write-Back (delayed transactions) or Write-Through SQL caching.
- Caching by object group name.
- Preserves uniqueness of keys.
- Manage keys by group name.
- Supports group name attributes (:sitewide, :nocaching, :permanent, :prefetch)
- Pre-fetch object groups from L2 to L1 cache.
- Caches and pre-fetches L2 misses (known to not exist in L2 cache).
- Prevents repeated, unnecessary L2 cache reads across requests.
- Multisite / Network support:
- Cache/flush/switch by blog id.
- Caching statistics:
- Cache hits (typically above 90%).
- Overall and L1/L2 hits, misses, & ratio.
- Cache hits by object groups.
- Number of APCu and SQLite keys stored.
- SQLite select/update/delete/commit counts.
- Supports an enhanced superset of WP Object Cache functions.
- Easily enabled or disabled from {eac}Doojigger administrator page.
- Imports existing MySQL transients.
- Exports cached transients to MySQL when disabled.
- Automatically cleans and optimizes SQLite database.
- Optionally schedule periodic cache invalidation and rebuild.
- Uses the PHP Data Objects (PDO) extension included with PHP.
While {eac}ObjectCache does support multiple WordPress installations on a single server it does not support multiple servers per installation. SQLite and APCu work only on a single server, not in a clustered or load-balanced environment.
Configuration Alternatives
Assuming you have SQLite and APCu installed, what are your best options?
-
Fastest Caching – Uses in-process memory and APCu shared memory.
- Disable SQLite. *
define( 'EAC_OBJECT_CACHE_USE_DB', false );
- Advantage
- Fast memory-only access.
- Handles concurrent updates through APCu cache.
- Disadvantage
- APCu may invalidate data under memory constraint.
- APCu cache is not shared with CLI.
- APCu cache is lost on system or PHP restart.
- Disable SQLite. *
-
Less memory (almost as fast) – Uses in-process memory and APCu shared memory.
- Disable SQLite. *
define( 'EAC_OBJECT_CACHE_USE_DB', false );
- Optimize memory use. *
define( 'EAC_OBJECT_CACHE_OPTIMIZE_MEMORY', true );
- Advantage
- Fast memory-only access.
- Handles concurrent updates through APCu cache.
- Conserves per-request memory by not pushing APCu hits to in-process memory.
- Disadvantage
- Slightly slower to access APCu memory over in-process memory.
- APCu may invalidate data under memory constraint.
- APCu cache is not shared with CLI.
- APCu cache is lost on system or PHP restart.
- Disable SQLite. *
-
Most resilient (and still fast) – Uses in-process memory, APCu shared memory, and SQLite database.
- Do nothing, this is the default.
- Advantage
- Most cache hits will come from in-process and APCu memory.
- SQLite retains cache data after restart.
- Disadvantage
- Must keep SQLite database (on disk) updated.
- Potential concurrency issues on high-volume site.
-
Resilient, efficient, and fast (recommended) – Uses in-process memory, APCu shared memory, and SQLite database.
- Optimize memory use. *
define( 'EAC_OBJECT_CACHE_OPTIMIZE_MEMORY', true );
- Advantage
- Most cache hits will come from in-process and APCu memory.
- Handles concurrent updates better through APCu cache.
- Conserves per-request memory by not pushing APCu hits to in-process memory.
- SQLite retains cache data after restart.
- Disadvantage
- Slightly slower to access APCu memory over in-process memory.
- Must keep SQLite database (on disk) updated.
- Optimize memory use. *
-
Least efficient (default when APCu is not installed) – Uses in-process memory and SQLite database.
- Disable APCu. *
define( 'EAC_OBJECT_CACHE_USE_APCU', false );
- Advantage
- Saves resources by not taking up APCu reserves.
- More secure by not using shared memory.
- SQLite retains cache data after restart.
- Disadvantage
- All cached data initially read from disk.
- Must keep SQLite database (on disk) updated.
- Potential concurrency issues on high-volume site.
- Disable APCu. *
-
For high-volume sites – reduces or eliminates potential race conditions
- Optimize memory use. *
define( 'EAC_OBJECT_CACHE_OPTIMIZE_MEMORY', true );
- Disable delayed writes. *
define( 'EAC_OBJECT_CACHE_DELAYED_WRITES', false );
- Disable use of
alloptionsarray.define( 'EAC_OBJECT_CACHE_DISABLE_ALLOPTIONS', true );
- Advantage
- Most cache hits will come from in-process and APCu memory.
- Conserves per-request memory by not pushing APCu hits to in-process memory.
- Updates SQLite data immediately.
- Conserves per-request memory by elimination large
alloptionsarray(s).
- Disadvantage
- Slightly slower to access APCu memory over in-process memory.
- Multiple single-row SQLite update transactions.
- Slightly slower to access individual options from cache rather than
alloptionsarray.
- Optimize memory use. *
* These options may be set from the {eac}Doojigger administration screen.
When using SQLite, delayed writes (see below) dramatically improves efficiency by only writing updates at the end of the script process.
When using APCu shared memory, data is accessable by other PHP processes that may run on the server.
Inside The Numbers
Label
Value
cache hits
The total number of requests that returned a cached value.
cache misses
The total number of requests that did not return a cached value. This number includes L1 cache (-), L2 non-persistent, L2 APCu (-), and L2 SQL misses.
L1 cache hits
The number of requests that were found in the L1 memory cache.
L1 cache (+)
Request found in the L1 memory cache with data (positive hits).
L1 cache (-)
Request found in the L1 memory cache with no data (negative hits).
L1 cache misses
The number of requests not found in the L1 memory cache.
L2 non-persistent
L1 cache misses in a non-persistent group (not in L2 cache).
L2 APCu hits
The number of L1 cache misses (minus L2 non-persistent) that were found in the L2 APCu cache.
L2 APCu (+)
Request found in the L2 APCu cache with data (positive hits).
L2 APCu (-)
Request found in the L2 APCu cache with no data (negative hits).
L2 APCu misses
The number of requests not found in the L2 APCu cache.
L2 SQL hits
The number of L2 APCu misses (or L1 cache misses) that were found in the L2 SQLite cache.
L2 SQL misses
The number of requests not found in the L2 SQLite cache.
L2 APCu updates
The number of APCu keys updated.
L2 APCu deletes
The number of APCu keys deleted.
L2 SQL selects
The number of SQLite select statements executed.
L2 SQL updates
The number of SQLite records updated.
L2 SQL deletes
The number of SQLite records deleted.
L2 SQL commits
The number of SQLite transactions executed to update and delete records.
- When a request results in a L2 SQL miss, the key is added to the L1 memory or L2 APCu cache as a miss so that additional requests for the same key do not result in additional SQL selects. This is known as a negative hit and still counted as a cache miss making the cache hit ratio (93.10%) understated.
Object cache statistics may be found:
- In the WP Object Cache dashboard panel.
- Uses
$wp_object_cache->showDashboardStats()
- Uses
- In the Debug Bar > Object Cache panel.
- Uses
$wp_object_cache->stats()
- Uses
- In the Query Monitor > Logs > Info panel.
- Uses
$wp_object_cache->getCurrentStats()
- Uses
- In a wp_admin_notice block when display_stats is set for sampling.
- Uses
$wp_object_cache->htmlStats()
- Uses
Settings
Several cache settings can be modified by adding defined constants to the wp-config.php file. The default settings are recommended and optimal in most cases but individual settings may need to be adjusted based on traffic volume, specific requirements, or unique circumstances. Most of these settings can be adjusted in the {eac}Doojigger administrator screen.
-
To disable use of the SQLite Database (default: true):
define( 'EAC_OBJECT_CACHE_USE_DB', false );
{eac}ObjectCache will still operate as an in-memory cache without the persistent database. If using APCu memory caching, persistence is maintained as long as the cache is not flushed, manually or by restarting PHP.
-
To disable use of the APCu memory cache (default: true if APCu is enabled):
define( 'EAC_OBJECT_CACHE_USE_APCU', false );
APCu memory caching is used, by default, only if the APCu PECL extension is installed.
-
To optimize memory use when using APCu (default: false):
define( 'EAC_OBJECT_CACHE_OPTIMIZE_MEMORY', true );
When using APCu memory caching, optimize internal memory by not storing APCu data in the L1 memory cache. This may slightly (negligibly) increase processing time as cache hits will come through APCu but will reduce the per-process memory usage. This may also be advantageous on high-volume sites where a single object may be updated by simultaneous processes.
-
To disable use of the
alloptionsarray in WordPress (default: false):define( 'EAC_OBJECT_CACHE_DISABLE_ALLOPTIONS', true );
By default, WordPress pre-fetches many of the option values from the wp-options table on startup. This facilitates faster access to oft-used options. However, this also creates 1) a potential race condition on high-volume sites, and 2) a sometimes very large array of data in memory that may also be duplicated in the L1 and L2 caches. Disabling this forces WordPress to get individual options from the cache rather than from the array, eliminates the race condition, eliminates the large array(s), and reduces much of the logic used to maintain the array(s). This may be particularly advantageous when using APCu since the option values should already be in shared memory.
* Once enabled, the caches should be cleared to eliminate previously cached alloptions arrays.
* Uses filters pre_wp_load_alloptions (introduced in WP 6.2.0) and wp_autoload_values_to_autoload (introduced in WP 6.6.0).
-
To set the location of the SQLite database (default: ../wp-content/cache):
define( 'EAC_OBJECT_CACHE_DIR', '/full/path/to/folder' );
This folder can be outside of the web-accessable folders of your site – i.e. above the document root (htdocs, www, etc.) – provided that PHP can access (read/write) the folder (see the PHP open_basedir directive).
This folder should not be on a network share or other remote media. We’re caching data for quick access, the cache folder should be on fast, local media.
-
To set the name of the SQLite database (default: ‘.eac_object_cache.sqlite’):
define( 'EAC_OBJECT_CACHE_FILE', 'filename.sqlite' );
In addition to the database file, SQLite may also create temporary files using the same file name with a ‘-shm’ and ‘-wal’ suffix.
-
To set SQLite journal mode (default: ‘WAL’):
define( 'EAC_OBJECT_CACHE_JOURNAL_MODE', journal_mode )
journal_mode can be one of ‘DELETE’, ‘TRUNCATE’, ‘PERSIST’, ‘MEMORY’, ‘WAL’, or ‘OFF’.
See SQLite journal mode
-
To set SQLite Mapped Memory I/O (default: 0):
define( 'EAC_OBJECT_CACHE_MMAP_SIZE', int );
Sets the maximum number of bytes that are set aside for memory-mapped I/O.
See SQLite memory-mapped I/O
-
To set SQLite Page Size (default: 4096):
define( 'EAC_OBJECT_CACHE_PAGE_SIZE', int );
Sets the SQLite page size for the database.
See SQLite page size
-
To set SQLite Cache Size (default: -2000 [2,048,000]):
define( 'EAC_OBJECT_CACHE_CACHE_SIZE', int );
Sets the maximum number of database disk pages that SQLite will hold in memory or the maximum amount of memory to use for page caching.
See SQLite cache size
-
To set SQLite timeout (default: 3):
define( 'EAC_OBJECT_CACHE_TIMEOUT', int );
Sets the number of seconds before a SQLite transaction may timeout in error.
-
To set SQLite retries (default: 3):
define( 'EAC_OBJECT_CACHE_MAX_RETRIES', int );
Sets the maximum number of retries to attempt on critical actions.
-
To set delayed writes (default: 32):
define( 'EAC_OBJECT_CACHE_DELAYED_WRITES', true|false|int );
{eac}ObjectCache caches all objects in memory and writes new, updated, or deleted objects to the L2 (SQLite) cache. delayed writes simply holds objects in memory until the number of objects reaches a specified threshold, then writes them, in a single transaction, to the L2 cache (a.k.a. write-back caching). Setting delayed writes to false turns this functionality off (a.k.a. write-through caching). Setting to true writes all records only at the end of the script process/page request. Setting this to a number sets the object pending threshold to that number of objects.
-
To set the default expiration time (in seconds) (default: 0 [never]):
define( 'EAC_OBJECT_CACHE_DEFAULT_EXPIRE', -1|0|int );
When using the default WordPress object cache, object expiration isn’t very important because the entire cache expires at the end of the script process/page request. With a persistent cache, this isn’t the case. When an object is cached, the developer has the option of specifying an expiration time for that object. Since we don’t know …
Installation
{eac}ObjectCache is an extension plugin to and is fully functional with installation and registration of {eac}Doojigger.
However, the core object-cache.php file may be installed without {eac}Doojigger (referred to as ‘detached’ mode).
In detached mode, the plugin will attempt to copy the object-cache.php file to the /wp-content folder on activation, or you may manually copy the object-cache.php file from the plugin /src folder to the /wp-content folder to activate. Options can then be set using the documented PHP constants in the wp-config.php file.
Automatic Plugin Installation
This plugin is available from the WordPress Plugin Repository and can be installed from the WordPress Dashboard » Plugins » Add New page. Search for ‘EarthAsylum’, click the plugin’s [Install] button and, once installed, click [Activate].
See Managing Plugins -> Automatic Plugin Installation
Upload via WordPress Dashboard
Installation of this plugin can be managed from the WordPress Dashboard » Plugins » Add New page. Click the [Upload Plugin] button, then select the eacobjectcache.zip file from your computer.
See Managing Plugins -> Upload via WordPress Admin
Manual Plugin Installation
You can install the plugin manually by extracting the eacobjectcache.zip file and uploading the ‘eacobjectcache’ folder to the ‘wp-content/plugins’ folder on your WordPress server.
See Managing Plugins -> Manual Plugin Installation
Settings
Once installed and activated, options for this extension will show in the ‘Object Cache’ tab of {eac}Doojigger settings.
Changelog
Version 2.1.4 – September 12, 2026
- Compatible with WordPress 7.1.
- Fix: Flush runtime cache on
switch_to_blog, when using APCu but not SQLite L2 caching, could cause loss of data when processing across network sites.- Switching blogs no longer flushes unless using SQLite L2.
- SQLite L2 cache is updated before flushing memory cache.
- Aesthetic/Nonstructural changes…
- WP plugins page links.
- Plugin DocBlocks, readme headers, etc.
Version 2.1.3 – June 15, 2026
- Compatible with WordPress 7.0.
- Check for empty key in ‘multiple’ methods.
- Debug potential prepare/select error when Query Monitor is installed but deactivated.
- Please remove the db.php drop-in from wp-content when deactivating Query Monitor.
Version 2.1.2 – October 25, 2025
- Reinstated
write_hookswhen using APCu.
Version 2.1.1 – October 17, 2025
- FIX: proper return of empty/falsy APCu value.
- Filter out unused APCu/SQL stats on dashboard widget.
Version 2.1.0 – October 14, 2025
- Added
EAC_OBJECT_CACHE_DISABLE_ALLOPTIONSconstant to disable use of WPalloptionsarray.- More efficient with APCu, reduces memory and storage use.
- Requires WP 6.6.0+.
- Prefetch
alloptionsandnotoptionswhen not using APCu.- Requests for
alloptionsandnotoptionsmay be more than 70% of cache hits.
- Requests for
- Support keys in pre-fetch groups (group=>key) with SQL wildcard;
- Proper implementation of the
$forceoption inwp_cache_get(). - Fixed pre-fetch loader.
- Added dashboard widget –
showDashboardStats(). - Use full cache pathname (not just directory) to get APCu prefix id.
- Expire last sample after 1 day.
- Rework stats array/output, including htmlStats labels.
- Disabled
write_hookswhen using APCu (unnecessary).
Version 2.0.0 – September 30, 2025
- Added support for APCu caching as an intermediate layer between L1 and L2 caching.
- Add
EAC_OBJECT_CACHE_USE_DBconstant to disable DB use. - Add
EAC_OBJECT_CACHE_USE_APCUconstant to disable APCu use. - Add
EAC_OBJECT_CACHE_OPTIMIZE_MEMORYconstant when using APCu. - Removed bulk import of transients on install/rebuild.
- Added single import of transient on demand.
- Use default
flush_group()forwp_cache_set_last_changedhook. - Removed
select_all(), useselect_each(). - Add
log_statsflag and check for external logging plugins. - Verify Query Manager active before triggering actions.
- Type hint class variables.
- Updated administrator page.
- Rework stats arrays – 0=>hits, 1=>count, 2=>size (db total adds 3=>file size).
- Many other internal changes and optimizations.
For developers
Is this your plugin? Show off the numbers.
Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.
Best {eac}ObjectCache alternatives
All apcu plugins →FAQ
{eac}ObjectCache: quick answers
Straight answers, pulled from live WordPress.org data.
Live data from WordPress.org · checked Sep 27, 2026
Is {eac}ObjectCache free?
Yes. {eac}ObjectCache is free to download and use from the official WordPress.org plugin directory.
Is {eac}ObjectCache safe to use in 2026?
{eac}ObjectCache is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites, is rated 5/5 and was last updated 2 weeks ago, and scores 73/100 on our health check.
How many websites use {eac}ObjectCache?
{eac}ObjectCache is active on 10+ WordPress websites and has been downloaded 3,022 times since it launched in April 2024. It was downloaded 195 times in the last 30 days.
Does {eac}ObjectCache work with WordPress 7.1?
Yes. The developer has tested {eac}ObjectCache up to WordPress 7.1.2, the latest release. It requires WordPress 5.8 or newer.
What PHP version does {eac}ObjectCache need?
{eac}ObjectCache requires PHP 8.1 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.
When was {eac}ObjectCache last updated?
The latest version, 2.1.4, was released on September 14, 2026 (2 weeks ago).
Who makes {eac}ObjectCache?
{eac}ObjectCache is developed and maintained by Kevin Burkholder.
What are the best alternatives to {eac}ObjectCache?
The most popular alternatives to {eac}ObjectCache are APCu Manager (10K+ installs), SQLite Object Cache (10K+ installs) and atec Cache APCu (3K+ installs).
Powered by PageForge
Want thousands of pages that rank like these? Build them in an afternoon.
This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.
- CSV, Google Sheets & API data sources
- AI content, schema & internal links per page
- Works with Elementor, Gutenberg, Yoast & Rank Math
- Free on WordPress.org — no credit card


