Redis
← Tilbage til databaser

Redis

NoSQL

Ultrahurtig in-memory nøgle-værdi-lagring brugt til caching, sessioner, realtidsanalyser og meddelelser.

Foto: Markus Winkler / Unsplash

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