← Tilbage til databaser

Redis

NoSQL

Ultrahurtig 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
EXEC

Anvendelsesområ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

Relaterede databaser

MemcachedKeyDBDragonflyValkey