Redis je univerzálnější in-memory data store, Memcached je jednodušší pure cache. Oba dosahují sub-milisekundových latencí, ale Redis nabízí datové struktury, persistence a pokročilé funkce, které z něj dělají víc než cache. Memcached zůstává relevantní pro specifické scénáře, kde jeho jednoduchost a multi-threaded architektura přinášejí výhodu.
Redis¶
- Datové struktury — strings, lists, sets, sorted sets, hashes, streams, bitmaps, HyperLogLog
- Persistence — RDB snapshoty (periodické) a AOF (append-only file pro bod obnovy)
- Pub/Sub a Streams — real-time messaging a event streaming bez externího message brokeru
- Lua scripting — atomické serverové operace pro komplexní logiku
- Cluster a Sentinel — horizontální škálování a automatický failover
- Single-threaded event loop — každý příkaz je atomický, žádné race conditions
Redis s datovými strukturami umožňuje implementovat leaderboardy (sorted sets), rate limitery (INCR + EXPIRE), session storage (hashes), queues (lists/streams) a distribuované locky — vše v jednom systému s sub-milisekundovou latencí.
Memcached¶
- Key-value only — pouze string klíče a hodnoty, žádné složité struktury
- Žádná persistence — restart = ztráta všech dat
- Multi-threaded — využívá více CPU jader, lepší pro jednoduché operace na multi-core serverech
- Jednodušší — méně paměti per key, nižší overhead, méně funkcí = méně chyb
- Žádné advanced features — žádný pub/sub, scripting, cluster management
Memcached je jednoúčelový — čistý cache s nejnižší možnou latencí a minimálním overhead. Pro velké objemy jednoduchých get/set operací může být rychlejší než Redis díky multi-threaded architektuře.
Kdy co¶
- Redis — sessions, leaderboardy, rate limiting, queues, pub/sub, cache s persistence, obecný in-memory data store
- Memcached — pure caching velkých objemů jednoduchých key-value párů, multi-threaded výhoda na multi-core serverech
Redis pro 95 % use cases¶
Redis je univerzálnější a pokryje většinu potřeb. Memcached volte pouze pro pure caching velkých objemů, kde potřebujete maximální propustnost jednoduchých get/set operací a nepotřebujete persistence ani datové struktury.