Redis
NoSQLUltrahurtig in-memory nøgle-værdi-lagring brugt til caching, sessioner, realtidsanalyser og meddelelser.
Beskrivelse
Redis (Remote Dictionary Server) er et in-memory datastrukturlager kendt for sin blændende hastighed - den kan håndtere millioner af operationer per sekund. I modsætning til simple nøgle-værdi-lagre understøtter Redis rige datatyper: strenge, lister, mængder, sorterede mængder, hashes, bitmaps, hyperloglogs og strømme. Dette gør den utroligt alsidig til mange brugsscenarier. Redis holder alle data i RAM for maksimal hastighed, men kan persistere til disk via snapshots eller append-only-filer. Den bruges primært som cache-lag foran langsommere databaser, sessionslagring for webapplikationer, meddelelsesmægler med pub/sub og realtids-leaderboards. Redis understøtter også Lua-scripting for atomare operationer, transaktioner og replikering for høj tilgængelighed. Med Redis Cluster kan man skalere horisontalt. Store sites som Twitter, GitHub, Stack Overflow og Snapchat bruger Redis intensivt.
Features
- •In-memory-lagring for ekstrem hastighed
- •Rige datastrukturer (lister, mængder, hashes osv.)
- •Pub/Sub-meddelelser
- •Lua-scripting-understøttelse
- •Transaktioner og atomare operationer
- •Persistensmuligheder (RDB, AOF)
- •Replikering og Redis Sentinel
- •Horisontal skalering med Redis Cluster
Query Eksempel
// Strengoperationer
SET user:1000:name "Maria Nielsen"
GET user:1000:name
INCR page:views
EXPIRE session:abc123 3600 // Udløber efter 1 time
// Hash-operationer
HSET user:1000 name "Maria Nielsen" email "maria@email.dk" age 28
HGET user:1000 name
HGETALL user:1000
// Listeoperationer (kø)
LPUSH queue:tasks "send_email"
LPUSH queue:tasks "process_payment"
RPOP queue:tasks // FIFO-kø
// Mængdeoperationer
SADD user:1000:interests "reading" "hiking" "photography"
SISMEMBER user:1000:interests "reading" // Returnerer 1
// Sorteret mængde (leaderboard)
ZADD leaderboard 1500 "player1"
ZADD leaderboard 2300 "player2"
ZADD leaderboard 1800 "player3"
ZREVRANGE leaderboard 0 9 WITHSCORES // Top 10
// Pub/Sub
SUBSCRIBE notifications
PUBLISH notifications "Ny ordre modtaget"
// Transaktioner
MULTI
INCR account:1000:balance
DECR account:2000:balance
EXECAnvendelsesområder
- •Databasecaching for ydeevne
- •Sessionslagring i webapplikationer
- •Realtids-leaderboards og tællere
- •Pub/Sub-meddelelsessystemer
- •Rate limiting og API-throttling
Fordele
- ✓Ekstremt hurtig (sub-millisekund latenstid)
- ✓Simpel men kraftfuld API
- ✓Understøtter komplekse datastrukturer
- ✓Fremragende til realtidsbrugsscenarier
- ✓Open source med stort community
Ulemper
- ✗Begrænset af RAM-størrelse
- ✗Ikke ideel til komplekse forespørgsler
- ✗Persistens er langsommere end in-memory
- ✗Intet forespørgselssprog (kun nøglebaseret adgang)
- ✗Enkelttrådet (men meget effektiv)
Bedst til
- →Caching for at accelerere databaser
- →Sessionshåndtering
- →Realtidsanalyser
- →Spil-leaderboards
- →Beskedkøer og jobbehandling
Ikke anbefalet til
- ⚠Primært datalager for kritiske data
- ⚠Datasæt større end tilgængelig RAM
- ⚠Komplekse relationelle forespørgsler
- ⚠Langtidslagring uden persistens
- ⚠Ad hoc-forespørgsler på data