laminas/laminas-cache-storage-adapter-apcu
composer require laminas/laminas-cache-storage-adapter-apcu
php -m | grep apcu).use Laminas\Cache\Storage\Adapter\Apcu as ApcuAdapter;
$adapter = new ApcuAdapter();
$adapter->setItem('key', 'value');
$item = $adapter->getItem('key');
$cache = new ApcuAdapter(['namespace' => 'db_queries']);
$cache->setItem('user_123', $userData, 3600); // Cache for 1 hour
$user = $cache->getItem('user_123')->get();
PSR-6 Cache Integration:
// Laravel service provider binding
$this->app->bind(\Psr\Cache\CacheItemPoolInterface::class, function ($app) {
return new \Laminas\Cache\Storage\Adapter\Apcu(['namespace' => 'laravel']);
});
Tag-Based Invalidation (APCu-specific):
$adapter = new ApcuAdapter(['tags' => ['users']]);
$adapter->setItem('user_123', $userData);
$adapter->clearByTags(['users']); // Invalidate all tagged items
Fallback Strategies:
$adapter = new ApcuAdapter(['fallback' => new FilesystemAdapter()]);
Cache Configuration:
// config/cache.php
'apcu' => [
'driver' => 'apcu',
'namespace' => env('CACHE_APCU_NAMESPACE', 'laravel'),
'tags' => ['users', 'products'],
],
Dynamic Cache Prefixes:
$cache = Cache::store('apcu')->get('key', function () {
return Model::query()->first();
});
Cache Events:
Cache::store('apcu')->extend('apcu', function ($item) {
return (new ApcuItem($item->key(), $item->value(), $item->expiration()));
});
setItem() with TTL for automatic expiration:
$adapter->setItem('key', $value, 60); // 60 seconds
$adapter->setItems([
'key1' => 'value1',
'key2' => 'value2',
], 3600);
APCu Extension Requirements:
apcu.enable_cli=1 in php.ini for CLI applications.5.1.10 (check with php -r "echo APCU_VERSION;").Namespace Collisions:
namespace to avoid key conflicts:
$adapter = new ApcuAdapter(['namespace' => 'app_']);
Memory Limits:
apcu_cache_info().apcu.cache_by_default=0 in php.ini to avoid unintended caching.Tag Invalidation Quirks:
Check Cache Hits/Misses:
$stats = apcu_cache_info();
var_dump($stats['cache_list']);
Verify Item Existence:
if (!$adapter->hasItem('key')) {
// Handle miss
}
Clear Cache Safely:
$adapter->clear(); // Clears only the adapter's namespace
apcu_clear_cache(); // Clears ALL APCu cache (use cautiously)
Custom Item Classes:
class CustomApcuItem extends \Laminas\Cache\Storage\Item\ApcuItem {
public function isHit() {
// Custom logic
}
}
$adapter = new ApcuAdapter(['itemClass' => CustomApcuItem::class]);
Plugin System:
$adapter->addPlugin(new \Laminas\Cache\Storage\Plugin\Serializer());
Event Listeners:
$adapter->addPlugin(new class implements \Laminas\Cache\Storage\Plugin\PluginInterface {
public function __invoke($item, $operation) {
// Log cache operations
}
});
Cache Tags in Laravel:
Cache::tags() for tag-based invalidation:
Cache::tags(['users'])->put('user_123', $user);
Cache::tags(['users'])->flush();
Environment-Specific Config:
// config/cache.php
'apcu' => [
'driver' => env('CACHE_DRIVER', 'apcu'),
'namespace' => env('APP_NAME').'_".env('CACHE_APCU_NAMESPACE', ''),
],
Fallback to File Cache:
// config/cache.php
'stores' => [
'apcu' => [
'driver' => 'apcu',
'fallback' => 'file',
],
],
How can I help you explore Laravel packages today?