At a glance
| Redis LangCache | RedisVL SemanticCache | MorrowCache | |
|---|---|---|---|
| Form | Hosted REST API with Python and JS SDKs | Python library on Redis | Local proxy |
| Status | Public preview on Redis Cloud | Open source (MIT) | Open source (MIT), 2.0 |
| Integration | Call search before the model, store after | Call check before, store after | Change the client's base URL |
| Hit decision | Embedding similarity, threshold configurable | Cosine distance; docs example uses 0.1 | LLM judge admits a shortlisted candidate |
| Expiry | TTL and eviction configurable | No TTL unless you set one | TTL by freshness class; time-sensitive asks refused |
| Scale | Managed Redis | Your Redis deployment | One process, one SQLite file |
Where Redis wins
- It scales. Many app servers can share one cache, which a single-process SQLite proxy cannot do.
- RedisVL supports filterable fields such as a user ID, which makes per-user scoping explicit.
- LangCache manages the embedding model for you.
- If you already run Redis, there is nothing new to operate.
Where MorrowCache wins
- No code changes: any OpenAI-compatible client works by changing one URL.
- A model judges intent, rather than a distance cut-off deciding alone.
- Agent-aware: hits are scoped to the same prior turns, and tool-call responses are never stored.
- Runs on a laptop with nothing else installed: Node 22.5+ or Docker.
Verdict
For a multi-server production app that already uses Redis, RedisVL or LangCache is the natural fit. For a local agent, a script or a single service where you want caching without touching code, MorrowCache is simpler. Background: how semantic caches decide a hit.