Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Cache Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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:

  • PSR-16 has no cache tags, so any Laravel code using Cache::tags() has no equivalent.
  • TTL unit mismatch — Laravel's put() interprets integers as minutes; PSR-16 set() interprets them as seconds. Silent, catastrophic TTL drift during any shim work.
  • No 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.
  • Redis driver portability — verify in 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

  1. Does any current requirement actually need Laravel and webman to share a cache, or is this adoption driven by "it's a cache library"?
  2. Which driver will we use in production, and what exactly does it depend on (ext-redis vs. coroutine client)?
  3. What serialization does the driver use, and is it byte-compatible with Laravel's default (serialize vs. json)?
  4. Are we willing to own the key-prefix and invalidation contract as internal code?
  5. Does this package ever execute inside a Laravel request, or only inside a webman service?

Integration Approach

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

  1. Confirm the business need (week 0) — this gate is real, not ceremonial.
  2. Spike: verify driver dependencies, serialization, and behaviour under our PHP runtime (week 1).
  3. Write the shared-cache contract + adapter layer + contract tests (week 1–2).
  4. Single-namespace PoC in staging, dual-read comparison against the existing Laravel cache to validate miss rates and TTL behaviour (week 2–3).
  5. Production rollout for that one namespace only; no wider adoption without a second justified use case.

Operational Impact

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

  • TTL unit confusion (minutes vs. seconds) producing permanent or near-permanent entries.
  • Serialization mismatch between runtimes producing misses that look like "cache is cold" and never self-heal.
  • Cross-runtime invalidation drift — one side writes, the other never sees the update.
  • Hand-rolled remember without a lock, producing stampede on the Laravel side during cold starts.
  • Silent cache-miss-as-success — code that treats a deserialization failure as an empty value and masks the integration break.
  • Driver/runtime incompatibility surfacing only under Octane or under webman worker restart.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib