webman/cache
Cache component for the Webman framework, providing a PSR-16 simple cache API with multiple drivers including file, Redis, APCu, and in-memory array storage. Works with Workerman's event loop for fast, reliable caching in high-performance PHP applications.
Architecture fit — poor to conditional, and the framing matters. webman/cache is the cache component of the webman microservice framework (Workerman/event-loop, resident process, coroutine-aware clients), not a Laravel package. Our stack is Laravel on PHP-FPM with a partial Octane footprint. The only genuinely portable seam is PSR-16 (Psr\SimpleCache\CacheInterface), which Laravel's Illuminate\Cache\Repository also implements. Everything above that seam — the support\Cache facade surface used throughout webman code, driver instantiation, connection handling — is framework-coupled. The package is usable alongside Laravel as a shared cache substrate; it is not a drop-in replacement for Illuminate\Support\Facades\Cache inside a Laravel application.
Integration feasibility — medium for coexistence, low for substitution. Feasible pattern: both runtimes point at the same Redis instance with a documented key contract. Not feasible: routing Laravel's Cache:: calls through webman/cache. Gaps we would hit within the first sprint:
Cache::tags() has no equivalent.put() interprets integers as minutes; PSR-16 set() interprets them as seconds. Silent, catastrophic TTL drift during any shim work.remember/rememberForever/increment/decrement/lock in PSR-16; remember is the single most-used Laravel cache idiom and the source of stampede behaviour if hand-rolled.composer.json whether it wraps ext-redis, webman/redis, or symfony/cache. If it relies on Workerman's coroutine-aware Redis client or connection pool, it will not function under PHP-FPM and will behave unpredictably under Octane/Swoole.Technical risk — moderate, concentrated in signals rather than code. The composite score (7.83) is contradicted by the adoption signals: 3 stars, 0 dependents, single-org maintenance. The star count is misleading because webman components ship through the framework installer rather than being independently popular — but that cuts both ways: there is effectively no independent user base to lean on when something breaks, and no third-party bug reports to pre-screen. Last release dated 2026-03-24 is current, so maintenance is live today. MIT license is clean. The real risk is bus factor and the absence of a Laravel-shaped support community. Secondary risk: as a shared cache between two runtimes, we own the serialization format, key namespace, and invalidation contract ourselves — that is now our code, not the package's.
Key questions for the team
ext-redis vs. coroutine client)?serialize vs. json)?Stack fit. Treat webman/cache as an ecosystem-local component: permitted in webman services, prohibited as a Laravel cache backend. Standardize the shared substrate on Redis, not on the package. Laravel keeps Illuminate\Cache; webman keeps support\Cache; the contract between them is a Redis key schema plus a serialization format, both versioned in our repo and covered by contract tests.
Migration path. Do not migrate anything. If a concrete cross-runtime sharing need exists, the path is: (1) PoC a single low-risk cache (e.g., feature flags or reference data) with keys namespaced app:<domain>:v1:; (2) write the key/serialization/TTL contract down; (3) prove it end-to-end with a Laravel reader and a webman writer (and the reverse); (4) expand only if step 3 is boring. If no such need exists, the correct decision is no adoption and this assessment closes.
Compatibility. Pin the exact version and commit composer.lock; the low dependent count means minor releases get little external soak time. Isolate every usage behind one thin internal interface (SharedCache) so the underlying package can be swapped for symfony/cache or raw Redis without touching call sites — this is the cheapest insurance available and it costs a day. Do not let support\Cache leak into domain code.
Sequencing
Maintenance. MIT and actively released, but effectively single-vendor. We should expect to read the source when debugging, not file issues and wait. Budget a nominal owner (fractional engineer) for the adapter layer and the key contract — that internal layer is the thing most likely to need maintenance, not the package itself. Add a calendar review at each Laravel/PHP minor upgrade to re-verify the driver still behaves.
Support. No meaningful community to escalate to; no dependents means no Stack Overflow corpus and no blog-post debugging trail. Internal documentation is mandatory, not optional. Accept that the escalation path for a production incident ends at "read the driver code."
Scaling. Scaling characteristics are inherited from the driver, not the package: a Redis backend scales fine; the file driver does not scale across workers or hosts and must be banned in production. Two runtimes on one Redis instance means shared connection budgets and shared eviction pressure — a webman service flushing a namespace can silently degrade a Laravel feature that reads the same keys. Set separate logical DBs or hard key prefixes per runtime.
Failure modes to instrument before go-live
remember without a lock, producing stampede on the Laravel side during cold starts.Ramp-up. Low for the package API (PSR-16 plus a thin facade, an afternoon). The real ramp-up is organizational: engineers must learn that there are two cache facades in the estate with different TTL semantics and different feature sets, and that crossing them is a defect. Encode this in the adapter layer and in review checklists so it is enforced by tooling rather than by memory.
Bottom line. Score 7.83 overstates readiness; opportunity 42.19 is the more honest signal. Adopt only if a concrete cross-runtime caching need exists, and then adopt it as a namespaced component behind an internal adapter — never as Laravel's cache layer.
How can I help you explore Laravel packages today?