6.3 KiB
6.3 KiB
🔴 Redis
Přehled
Redis je in-memory key-value store s pokročilými datovými strukturami, používaný primárně jako cache, session store, message broker a real-time databáze. Běží v RAM s možností persistence na disk (RDB/AOF).
Data structures
| Struktura | Popis | Use case |
|---|---|---|
| String | Binární string (max 512 MB) | Cache hodnoty, session tokeny, counters |
| Hash | Map field-value | Uživatelský profil, objekt v cache |
| List | Linked list (push/pop na oba konce) | Queue (RPUSH/LPOP), log stream |
| Set | Unikátní hodnoty (unordered) | Tags, deduplikace, memberships |
| Sorted Set | Unikátní + score (řazení) | Leaderboardy, rate limiting, timeouts |
| Bitmap | Bitové pole | Feature flagy, daily active users |
| HyperLogLog | Approximate cardinality (12 KB = 2^64) | Unikátní návštěvníci (error < 1 %) |
| Stream | Append-only log (Kafka-like) | Event store, messaging |
| Geospatial | Geo-indexing (GEOADD, GEOSEARCH) | Lokalitní dotazy, proximity search |
| JSON | JSON dokument (RedisJSON modul) | Dokumentové struktury |
Eviction policies
| Policy | Popis | Use case |
|---|---|---|
| noeviction | Chyba při zápisu když je plno | Transakční data, neztrácet |
| allkeys-lru | LRU na všechny klíče | Obecná cache, standard |
| allkeys-lfu | LFU na všechny klíče | Často přistupovaná data |
| volatile-lru | LRU na klíče s TTL | Cache s expirací |
| volatile-ttl | Nejblíž k expiraci | Krátkodobá data |
| allkeys-random | Náhodný | Testování |
Redis Cluster vs Sentinel
| Vlastnost | Redis Sentinel | Redis Cluster |
|---|---|---|
| Škálování | Read replicas (master + replica) | Data sharding (16384 hash slotů) |
| Auto-failover | Ano (Sentinel) | Ano (gossip-based) |
| Multi-key ops | Ano (transactiony na masteru) | Omezené (stejný hash slot) |
| Client komunikace | Přes Sentinel (deprecated) | Cluster nodes redirect (MOVED/ASK) |
| Minimální uzly | Master + Replica + 3 Sentinel | 3 masters (každý s replikou) |
| Use case | Vysoká dostupnost, single shard | Multi-shard, horizontální škálování |
Persistence
| Metoda | Popis | RTO | RPO | Use case |
|---|---|---|---|---|
| RDB (Redis Database) | Periodický snapshot do dump.rdb | Minuty | Poslední snapshot | Cache, ztráta tolerována |
| AOF (Append-Only File) | Append-only log všech write operací | Sekundy | 1 s (fsync every sec) | Data nesmí být ztracena |
| RDB + AOF | Kombinace | Sekundy | 1 s | Doporučeno pro produkci |
Moduly (RediSearch, RedisJSON, RedisGraph)
Redis rozšiřitelný modulem:
- RediSearch — full-text search, facety, prefix/suffix vyhledávání
- RedisJSON — JSON path dotazy, manipulace dokumentů
- RedisGraph — grafová DB (na bázi Cypher, deprecated od 2025)
- RedisTimeSeries — time-series s downsamplingem, retention politikami
- RedisBloom — Bloom filtry, Cuckoo filtry, Top-K, Count-Min Sketch
Memcached vs Redis
| Vlastnost | Redis | Memcached |
|---|---|---|
| Data structures | String, Hash, List, Set, Sorted Set, Stream, JSON | Pouze String |
| Persistence | RDB + AOF | Žádná (čistě in-memory) |
| Replication | Master-replica, Cluster | Žádná (multi-threaded) |
| Eviction | 6 politik | LRU pouze |
| Lua scripting | Ano (EVAL) | Ne |
| Transakce | Ano (MULTI/EXEC) | Ne |
| Pub/Sub | Ano | Ne |
| Streaming | Ano (Stream) | Ne |
Doporučení — v čem je Redis lepší
| Oblast | Redis | Konkurence | Proč Redis |
|---|---|---|---|
| Cache (in-memory) | < 1 ms latence, 6 eviction politik | Memcached (pouze LRU string) | Bohatší datové typy, persistence, cluster |
| Session store | Hash + TTL, Cluster pro HA | DynamoDB (vyšší latence) | Jednodušší, rychlejší, nativní expirace |
| Rate limiting | Sorted Set (sliding window counter) | Aplikace v DB (složité) | Atomic operace, vestavěná logika |
| Leaderboard / scoring | Sorted Set (ZADD, ZRANK, ZREVRANGE) | SQL (ORDER BY + COUNT = expensive) | O(1) rank, O(log N) insert |
| Message queue | List/Stream (RPUSH+BLPOP) | Kafka (těžká, JVM) | Lehká, embedded, žádný broker |
| Real-time analytics | HyperLogLog + Bitmap + Stream | ClickHouse (těžká analytika) | Agregace v reálném čase, malá RAM |
| Geolokace | GEOADD, GEOSEARCH, GEODIST | PostGIS (těžší, disk-based) | In-memory, ideální pro real-time |
Kdy použít Redis
- Cache pro API — response cache, DB query cache, session cache
- Session management — distribuované session napříč servery
- Rate limiting — API gateway, per-user/per-IP limity
- Leaderboardy / žebříčky — real-time skórování
- Message broker — fronta úloh (RQ, Celery s Redis), pub/sub notifikace
- Real-time analytics — počítání unikátů, metrik, dashboardů
- Geoproxmity — "najdi nejbližší pobočku" v < 1 ms
Kdy použít něco jiného
- Trvalá data s SQL dotazy → PostgreSQL nebo MySQL
- Velké objemy > RAM → Memcached (multi-threaded), Dragonfly (více RAM utilization)
- Dlouhodobá fronta zpráv → Kafka, RabbitMQ (disk-based persistence)
- Dokumentová DB → MongoDB (persistentní, komplexní dotazy)
Redis licensing
Redis prošel zásadní změnou licence v roce 2024:
| Období | Licence | Podmínky |
|---|---|---|
| Do března 2024 | BSD 3-clause (open source) | Zcela volné použití, včetně managed služeb |
| Od března 2024 | RSALv2 + SSPL (dual license) | SSPL: pokud nabízíte Redis jako managed službu, musíte uvolnit celý stack jako open source. RSALv2: omezení na cloud provozovatele |
| Valkey (fork, Linux Foundation) | BSD 3-clause | Plně open source fork Redis 7.2, podpora od Linux Foundation, AWS, Google, Oracle |
Dopad: Managed Redis služby (AWS ElastiCache, Google Memorystore, Azure Cache for Redis) nemohou používat Redis 7.4+ bez komerční licence → přechází na Valkey. Pro self-hosted Redis beze změny — RSALv2/SSPL neomezuje interní použití.
Zdroje
Odkazy, knihy a standardy: sources/databases/sources.md
Poslední revize: 2026-06-03