SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Einführung &
                          Use Cases

                          Sebastian Cohnen
                           @tisba / tisba.de


Donnerstag, 3. Mai 12
About Me

                • Freier Entwickler
                ❤ Ruby/Rails & node.js
                ❤ Performance & Scalability Engineering
                ❤ Distributed Load Testing
                ❤ CouchDB, Redis & Riak
                und ebenfalls interessiert an Erlang, AMQP, ...



Donnerstag, 3. Mai 12
Redis


                        von Salvatore “antirez” Sanfilippo

                        erste Version ~04/2009

                        aktuell 2.4.13 (stable) / 2.6.0-rc2




Donnerstag, 3. Mai 12
Was ist Redis?

                        memcached Ersatz?

                        memcached on steriods?

                        Caching Server?

                        KV-Storage?

                        ...?




Donnerstag, 3. Mai 12
...!

                        in-memory Datenbank (KV Store)

                        Datentypen: String, Hash, List, Set & sorted Set

                        Master-Slave Replikation

                        Transaktionen

                        ASCII-basiertes Protokoll




Donnerstag, 3. Mai 12
Getting Started

                        http://redis.io/download

                        zum Spielen 2.6.x – für Live-Systeme 2.4.x
                        brew install redis (apt-get install redis)

                        $ redis-cli
                        > SET myval "bar"
                        OK
                        > GET myval
                        "bar"



Donnerstag, 3. Mai 12
Datentypen




Donnerstag, 3. Mai 12
Strings

                        binary safe Byte-Array

                        bitweiser Zugriff möglich

                        numerische Werte werden optimiert gespeichert

                        GET[BIT|RANGE], SET[BIT|RANGE],
                        APPEND, STRLEN, ...

                        INCR[BY], DECR



Donnerstag, 3. Mai 12
Listen


                        Sortierte Liste aus Strings

                        [L|R]POP, [L|R]PUSH

                        LINSERT mylist BEFORE|AFTER “foo”

                        LTRIM, LRANGE, RPOPLPUSH




Donnerstag, 3. Mai 12
Hashes
                        Hash Map mit Key und Value, jeweils Strings

                        z.B. zum Abbilden von Objekten

                        direkter Zugriff auf einzelne, mehrere oder alle
                        Attribute

                        HGET, HMGET, HGETALL

                        HSET, HMSET

                        HKEYS, HVALS, HLEN


Donnerstag, 3. Mai 12
Mengen


                        unsortiert (S) & sortierte (Z)

                        [S|Z]ADD, [S|Z]REM, [S|Z]CARD

                        [S|Z]DIFF, [S|Z]INTER, [S|Z]UNION

                        ZSCORE, ZRANK, ZRANGE, ZREMRANGEBYRANK




Donnerstag, 3. Mai 12
Verschiedenes




Donnerstag, 3. Mai 12
Transaktionen
                        > MULTI
                        OK
                        > INCR foo
                        QUEUED
                        > INCR bar
                        QUEUED
                        > EXEC
                        1) (integer) 1
                        2) (integer) 1




Donnerstag, 3. Mai 12
Debugging


                        INFO

                        MONITOR

                        SLOWLOG

                        CONFIG [GET|SET]




Donnerstag, 3. Mai 12
Performance?




Donnerstag, 3. Mai 12
Redis ist schnell
                             genug!



Donnerstag, 3. Mai 12
Benchmarks sind
                            doof ;)
                        redis-benchmark -P 64 -n 1000000 
                          -t incr,get,set

                        => 370k SET/s | 450k GET/s | 347k INCR/s
                        in bisherigen Tests sind dauerhafte 30k OPS/s auf EC2
                        kein Problem (YMMV)

                        http://redis.io/topics/benchmarks




Donnerstag, 3. Mai 12
Performance
                        generell gute, stabile Latenzen & guter Durchsatz

                        algorithmische Komplexität ist gut dokumentiert

                        Optimierung ist oft einfach



                        Wichtig

                           Pipelining nutzen

                           Domain Socket vs. TCP Socket


Donnerstag, 3. Mai 12
Use Cases




Donnerstag, 3. Mai 12
Caching


                        plain Strings (serialisierte Objekte, JSON, HTML,
                        Bilder...)

                        Objekte (als Hash)




Donnerstag, 3. Mai 12
BG Jobs, Queues


                        resque (Ruby), node-resque (node.js)

                        Listen mit BLPOP

                        Priorisierte Queues mit sortierten Mengen




Donnerstag, 3. Mai 12
Statistiken


                        Atomare Counter (INCR, INCRBY, HINCRBY,
                        ZINCRBY)

                        Sets für eindeutige Events

                        ...




Donnerstag, 3. Mai 12
IPC

                        Pub/Sub Pattern

                          SUBSCRIBE user.new

                          PUBLISH user.new 4232

                          PSUBSCRIBE user.*

                        Kommunikation zwischen Prozessen (Master,
                        Worker, ...)



Donnerstag, 3. Mai 12
Weitere Use Cases


                        Visitor/Event Tracking

                        LRU Cache

                        Scoreboard/Leaderboard




Donnerstag, 3. Mai 12
1st class DB

                        Integraler Bestandteil / Erweiterung der
                        Anwendungslogik

                        Sets, Lists und Hashes um spezielle Aufgaben zu lösen


                        alle Requests aus Redis (“live cache”)

                        Datenbank als Fallback




Donnerstag, 3. Mai 12
Resources
                        Infos zu Redis & Dokumentation: http://redis.io/

                        Blog von Salvatore: http://antirez.com



                        https://groups.google.com/forum/#!topic/redis-db/
                        d4QcWV0p-YM

                        http://highscalability.com/blog/2012/4/2/youporn-
                        targeting-200-million-views-a-day-and-beyond.html



Donnerstag, 3. Mai 12
Thanks! Q & A?


                                 ?
                             Sebastian Cohnen
                                  @tisba


Donnerstag, 3. Mai 12

Weitere ähnliche Inhalte

Andere mochten auch

Semantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobe
Semantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobeSemantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobe
Semantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobe
datentaste
 
Best of mensuel bowers & wilkins - été 2011
Best of mensuel   bowers & wilkins - été 2011Best of mensuel   bowers & wilkins - été 2011
Best of mensuel bowers & wilkins - été 2011
B&W Group France
 
Ma ville .meknes
Ma ville   .meknesMa ville   .meknes
Ma ville .meknes
merico2
 
Derecho a una educación tea
Derecho a una educación teaDerecho a una educación tea
Derecho a una educación tea
Marta Montoro
 

Andere mochten auch (16)

Semantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobe
Semantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobeSemantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobe
Semantische Suche im audiovisuellen Kulturerbe - Das Projekt mediaglobe
 
Sonnenschutzratgeber
SonnenschutzratgeberSonnenschutzratgeber
Sonnenschutzratgeber
 
Best of mensuel bowers & wilkins - été 2011
Best of mensuel   bowers & wilkins - été 2011Best of mensuel   bowers & wilkins - été 2011
Best of mensuel bowers & wilkins - été 2011
 
[Tutoriel] Insérer une image dans une application IBM i avec SilverDev
[Tutoriel] Insérer une image dans une application IBM i avec SilverDev[Tutoriel] Insérer une image dans une application IBM i avec SilverDev
[Tutoriel] Insérer une image dans une application IBM i avec SilverDev
 
Ma ville .meknes
Ma ville   .meknesMa ville   .meknes
Ma ville .meknes
 
1950
19501950
1950
 
L'accessibilité : un truc réservé aux riches ?
L'accessibilité : un truc réservé aux riches ?L'accessibilité : un truc réservé aux riches ?
L'accessibilité : un truc réservé aux riches ?
 
Présentation ANFR - conférence de presse
Présentation ANFR - conférence de pressePrésentation ANFR - conférence de presse
Présentation ANFR - conférence de presse
 
Innocherche CES las-vegas Janvier 2011
Innocherche  CES  las-vegas Janvier 2011Innocherche  CES  las-vegas Janvier 2011
Innocherche CES las-vegas Janvier 2011
 
Edr banque
Edr banqueEdr banque
Edr banque
 
EXEMPLES FRAUDE ELECTORALE COTE D IVOIRE OUATTARA
EXEMPLES FRAUDE ELECTORALE COTE D IVOIRE OUATTARAEXEMPLES FRAUDE ELECTORALE COTE D IVOIRE OUATTARA
EXEMPLES FRAUDE ELECTORALE COTE D IVOIRE OUATTARA
 
Bibeltreff1
Bibeltreff1Bibeltreff1
Bibeltreff1
 
Zahlen Daten Fakten
Zahlen Daten FaktenZahlen Daten Fakten
Zahlen Daten Fakten
 
Derecho a una educación tea
Derecho a una educación teaDerecho a una educación tea
Derecho a una educación tea
 
Tierportraits
TierportraitsTierportraits
Tierportraits
 
Derechos de autor
Derechos de autorDerechos de autor
Derechos de autor
 

NoSQL CGN: Redis (05/2012)

  • 1. Einführung & Use Cases Sebastian Cohnen @tisba / tisba.de Donnerstag, 3. Mai 12
  • 2. About Me • Freier Entwickler ❤ Ruby/Rails & node.js ❤ Performance & Scalability Engineering ❤ Distributed Load Testing ❤ CouchDB, Redis & Riak und ebenfalls interessiert an Erlang, AMQP, ... Donnerstag, 3. Mai 12
  • 3. Redis von Salvatore “antirez” Sanfilippo erste Version ~04/2009 aktuell 2.4.13 (stable) / 2.6.0-rc2 Donnerstag, 3. Mai 12
  • 4. Was ist Redis? memcached Ersatz? memcached on steriods? Caching Server? KV-Storage? ...? Donnerstag, 3. Mai 12
  • 5. ...! in-memory Datenbank (KV Store) Datentypen: String, Hash, List, Set & sorted Set Master-Slave Replikation Transaktionen ASCII-basiertes Protokoll Donnerstag, 3. Mai 12
  • 6. Getting Started http://redis.io/download zum Spielen 2.6.x – für Live-Systeme 2.4.x brew install redis (apt-get install redis) $ redis-cli > SET myval "bar" OK > GET myval "bar" Donnerstag, 3. Mai 12
  • 8. Strings binary safe Byte-Array bitweiser Zugriff möglich numerische Werte werden optimiert gespeichert GET[BIT|RANGE], SET[BIT|RANGE], APPEND, STRLEN, ... INCR[BY], DECR Donnerstag, 3. Mai 12
  • 9. Listen Sortierte Liste aus Strings [L|R]POP, [L|R]PUSH LINSERT mylist BEFORE|AFTER “foo” LTRIM, LRANGE, RPOPLPUSH Donnerstag, 3. Mai 12
  • 10. Hashes Hash Map mit Key und Value, jeweils Strings z.B. zum Abbilden von Objekten direkter Zugriff auf einzelne, mehrere oder alle Attribute HGET, HMGET, HGETALL HSET, HMSET HKEYS, HVALS, HLEN Donnerstag, 3. Mai 12
  • 11. Mengen unsortiert (S) & sortierte (Z) [S|Z]ADD, [S|Z]REM, [S|Z]CARD [S|Z]DIFF, [S|Z]INTER, [S|Z]UNION ZSCORE, ZRANK, ZRANGE, ZREMRANGEBYRANK Donnerstag, 3. Mai 12
  • 13. Transaktionen > MULTI OK > INCR foo QUEUED > INCR bar QUEUED > EXEC 1) (integer) 1 2) (integer) 1 Donnerstag, 3. Mai 12
  • 14. Debugging INFO MONITOR SLOWLOG CONFIG [GET|SET] Donnerstag, 3. Mai 12
  • 16. Redis ist schnell genug! Donnerstag, 3. Mai 12
  • 17. Benchmarks sind doof ;) redis-benchmark -P 64 -n 1000000 -t incr,get,set => 370k SET/s | 450k GET/s | 347k INCR/s in bisherigen Tests sind dauerhafte 30k OPS/s auf EC2 kein Problem (YMMV) http://redis.io/topics/benchmarks Donnerstag, 3. Mai 12
  • 18. Performance generell gute, stabile Latenzen & guter Durchsatz algorithmische Komplexität ist gut dokumentiert Optimierung ist oft einfach Wichtig Pipelining nutzen Domain Socket vs. TCP Socket Donnerstag, 3. Mai 12
  • 20. Caching plain Strings (serialisierte Objekte, JSON, HTML, Bilder...) Objekte (als Hash) Donnerstag, 3. Mai 12
  • 21. BG Jobs, Queues resque (Ruby), node-resque (node.js) Listen mit BLPOP Priorisierte Queues mit sortierten Mengen Donnerstag, 3. Mai 12
  • 22. Statistiken Atomare Counter (INCR, INCRBY, HINCRBY, ZINCRBY) Sets für eindeutige Events ... Donnerstag, 3. Mai 12
  • 23. IPC Pub/Sub Pattern SUBSCRIBE user.new PUBLISH user.new 4232 PSUBSCRIBE user.* Kommunikation zwischen Prozessen (Master, Worker, ...) Donnerstag, 3. Mai 12
  • 24. Weitere Use Cases Visitor/Event Tracking LRU Cache Scoreboard/Leaderboard Donnerstag, 3. Mai 12
  • 25. 1st class DB Integraler Bestandteil / Erweiterung der Anwendungslogik Sets, Lists und Hashes um spezielle Aufgaben zu lösen alle Requests aus Redis (“live cache”) Datenbank als Fallback Donnerstag, 3. Mai 12
  • 26. Resources Infos zu Redis & Dokumentation: http://redis.io/ Blog von Salvatore: http://antirez.com https://groups.google.com/forum/#!topic/redis-db/ d4QcWV0p-YM http://highscalability.com/blog/2012/4/2/youporn- targeting-200-million-views-a-day-and-beyond.html Donnerstag, 3. Mai 12
  • 27. Thanks! Q & A? ? Sebastian Cohnen @tisba Donnerstag, 3. Mai 12