Skip to content

jardisAdapter/cache

Repository files navigation

Jardis Cache

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

Part of Jardis — the Domain-Driven Design platform for PHP. You model your domain; Jardis generates the production-ready hexagonal code (DTOs, Command/Query handlers, repositories, persistence). This package is part of the open-source foundation that generated code runs on.

A PSR-16 cache for PHP with multi-layer chaining. Stack 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/en/adapter/cache

License

This package is licensed under the MIT License.


Jardis · Documentation · Headgent

KI-gestützte Entwicklung

Dieses Package liefert einen Skill für Claude Code, Cursor, Continue und Aider mit. Installation im Konsumentenprojekt:

composer require --dev jardis/dev-skills

Mehr Details: https://docs.jardis.io/en/skills

About

PSR-16 multi-layer cache for PHP — stack Memory, APCu, Redis, and Database backends with automatic read-through backfill and write-through propagation; a building block of the open-source foundation that Jardis-generated DDD code runs on

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors