PSR-16 multi-layer caching engine with write-through propagation across Redis, APCu, Database, and Memory

Maintainers

Package info

github.com/jardisAdapter/cache

pkg:composer/jardisadapter/cache

Statistics

Installs: 84

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-03-31 08:19 UTC

This package is auto-updated.

Last update: 2026-03-31 08:21:45 UTC


README

Build Status License: PolyForm Shield PHP Version PHPStan Level PSR-12 PSR-16 Coverage

Part of the Jardis Business Platform — Enterprise-grade PHP components for Domain-Driven Design

PSR-16 multi-layer caching engine. Chain Memory, APCu, Redis, and Database backends in a single Cache instance. On a cache miss in a fast layer, the value is automatically backfilled from the next slower layer — so subsequent reads hit the fastest backend available. Writes propagate to all configured layers simultaneously.

Features

  • Multi-Layer Chain — Stack any number of backends; reads backfill upper layers automatically
  • 5 BackendsCacheMemory, CacheApcu, CacheRedis, CacheDatabase, CacheNull
  • PSR-16 — Full Psr\SimpleCache\CacheInterface implementation on every layer
  • Namespace Isolation — Each layer instance carries its own namespace prefix
  • Immutable After Construction — All layers set via constructor; no mutation at runtime
  • Null Object Pattern — Empty Cache([]) degrades gracefully to a no-op CacheNull
  • TTL Support — Integer seconds or DateInterval on every set() / setMultiple()
  • Zero Dependencies — No third-party packages required beyond PSR interfaces

Installation

composer require jardisadapter/cache

Quick Start

use JardisAdapter\Cache\Cache;
use JardisAdapter\Cache\Adapter\CacheMemory;
use JardisAdapter\Cache\Adapter\CacheRedis;

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// Two-layer cache: L1 = in-process memory, L2 = Redis
$cache = new Cache([
    new CacheMemory('myapp'),
    new CacheRedis($redis, 'myapp'),
]);

$cache->set('user:42', $userData, ttl: 300);
$user = $cache->get('user:42');

Advanced Usage

use JardisAdapter\Cache\Cache;
use JardisAdapter\Cache\Adapter\CacheMemory;
use JardisAdapter\Cache\Adapter\CacheApcu;
use JardisAdapter\Cache\Adapter\CacheRedis;
use JardisAdapter\Cache\Adapter\CacheDatabase;

// Four-layer cascade: L1 memory → L2 APCu → L3 Redis → L4 database
// A miss at L1 checks L2, then L3, then L4.
// When found, the value is written back into all faster layers automatically.
$cache = new Cache([
    new CacheMemory('orders'),
    new CacheApcu('orders'),
    new CacheRedis($redis, 'orders'),
    new CacheDatabase($pdo, namespace: 'orders'),
]);

// Bulk operations — all layers updated in one call
$cache->setMultiple([
    'order:101' => $order101,
    'order:102' => $order102,
], ttl: 600);

$orders = $cache->getMultiple(['order:101', 'order:102']);

// Invalidate a key across all layers
$cache->delete('order:101');

// Expire stale database entries explicitly
$dbLayer = new CacheDatabase($pdo, namespace: 'orders');
$dbLayer->cleanExpired();

Documentation

Full documentation, guides, and API reference:

docs.jardis.io/adapter/cache

License

This package is licensed under the PolyForm Shield License 1.0.0. Free for all use except building competing frameworks or developer tooling.

Jardis · Documentation · Headgent