Download the PHP package ez-php/cache without Composer
On this page you can find all versions of the php package ez-php/cache. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package cache
ez-php/cache
Cache module for the ez-php framework — array, file, Redis, and Memcached drivers with a unified interface, tagging, locking, cache statistics, and stampede protection.
Requirements
- PHP 8.5+
- ez-php/framework 0.*
- ext-redis (for Redis driver)
- ext-memcached (for Memcached driver)
Installation
Setup
Register the service provider:
Configure in config/cache.php:
Use the module-scoped
CACHE_REDIS_*variables, not the genericREDIS_HOST/REDIS_PORT: in an application built from theez-php/template,REDIS_PORTis the host-published port (e.g.6383), while the app container always reaches Redis atredis:6379.
Usage
Basic operations
Values must be null, scalars, or (nested) arrays of those. Every driver throws a
CacheException for objects and resources — the File and Redis drivers restore values with
allowed_classes => false, so an object could never come back intact. Cache a scalar/array
representation instead and rebuild the object after reading it:
Increment / decrement
Both are atomic (Redis: native INCRBY/DECRBY; File/Array/Memcached: read-modify-write) and create the key with a starting value of 0 when it does not already exist.
Tagging
Locking
release() only removes a lock this instance acquired and still owns: if the TTL ran out and
another process took the lock meanwhile, the late release() leaves that lock alone. Use
forceRelease() for a deliberate hand-off where another process releases (it removes the lock
whoever holds it; FileLock can't break another process's flock(), so there it only releases its own).
Stampede protection
Key prefixes
Several applications or tenants sharing one store keep their keys apart with PrefixedCache — or set cache.prefix (CACHE_PREFIX) and the provider wraps the configured driver for you:
Keys, locks and tags are prefixed. flush() still empties the whole underlying store (every prefix); tag entries and flush the tag to invalidate one prefix.
Console commands
With an ez-php application (and ez-php/console, which the framework already requires), CacheServiceProvider registers:
With the apcu driver cache:clear exits 1 instead: the console has its own APCu memory and cannot reach the PHP-FPM workers' cache. Restart PHP-FPM, or flush from a web request. For the same reason, values a queue worker or other CLI process writes to APCu are never seen by web requests.
cache:prune is a no-op on stores that evict on their own (array, file, Redis, Memcached).
Drivers
| Driver | CACHE_DRIVER |
Notes |
|---|---|---|
array |
array |
In-memory, request lifetime only |
file |
file |
Filesystem, serialised entries |
redis |
redis |
Via ext-redis; flush() clears entire database |
memcached |
memcached |
Via ext-memcached; flush() clears entire server |
apcu |
apcu |
Via ext-apcu (CLI: apc.enable_cli=1); shared by the PHP-FPM workers of one host — not with CLI processes, each of which gets its own short-lived APCu memory; atomic counters; flush() clears the APCu user cache |
database |
database |
On the bound DatabaseInterface; tables cache/cache_locks auto-created (MySQL, SQLite, PostgreSQL); flush() empties only the cache table |
Classes
| Class | Description |
|---|---|
CacheInterface |
Unified contract: get, set, forget, has, remember, flush, increment, decrement |
ArrayDriver |
In-memory driver |
FileDriver |
Filesystem driver with MD5-keyed files |
RedisDriver |
Redis driver via ext-redis; native TTL |
MemcachedDriver |
Memcached driver via ext-memcached |
ApcuDriver |
Shared-memory driver via ext-apcu (one host) |
DatabaseDriver |
Database driver on DatabaseInterface; auto-created tables; run cache:prune (or prune()) periodically to delete expired rows that are never read again |
PrunableCacheInterface |
prune(): int — implemented by DatabaseDriver |
CacheClearCommand / CachePruneCommand |
cache:clear [--tags=…] / cache:prune |
FileLock / ArrayLock / RedisLock / MemcachedLock / DatabaseLock / ApcuLock |
Driver-specific lock implementations |
TaggableDriverTrait |
Provides tags() → TaggedCache for all drivers |
TaggedCache |
Tag-scoped decorator: records keys per tag; flush() invalidates the group |
CacheStats |
Immutable value object: hits, misses |
CacheValue |
Value-contract guard used by every driver's set(): rejects objects and resources |
StampedeProtectedCache |
Decorator: probabilistic early recompute to prevent stampedes |
PrefixedCache |
Decorator: prefixes every key, lock and tag list; wired by cache.prefix |
CacheServiceProvider |
Config-driven driver binding |
License
MIT — Andreas Uretschnig