Slide 1

Slide 1 text

on fire

Slide 2

Slide 2 text

Introduction

Slide 3

Slide 3 text

http://cdn.memegenerator.net/instances/400x/37123303.jpg

Slide 4

Slide 4 text

REDIS Supporté par VmWare REmote Dictionary Server / Redistribute

Slide 5

Slide 5 text

NoSql : Les grandes familles ● Clé/Valeur ○ MemcacheD ○ Redis ● Colonne ○ BigTable ○ Hbase ○ Cassandra ● Document ○ MongoDb ○ CouchDb/CouchBase ○ Riak ● Graph ○ Neo4j ○ FlockDb ○ Titan

Slide 6

Slide 6 text

REDIS advanced key-value store

Slide 7

Slide 7 text

REDIS in-memory database

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

REDIS Mais, Redis c'est pareil que MemcacheD !

Slide 10

Slide 10 text

REDIS = MemcacheD ? ...

Slide 11

Slide 11 text

REDIS data structures server

Slide 12

Slide 12 text

En production chez Eux : ● Github ● Craiglist ● YouPorn ● Blizzard ● TweetDeck ● Disqus ● flickr ● Stackoverflow ... Nous : ● ... ● Achetezfacile ● MF/M6info/Clubic(en cache) et bientôt : ● ...

Slide 13

Slide 13 text

Structure ● Strings ● Hashes ● Lists ● (Sorted) Sets

Slide 14

Slide 14 text

Complexité O(1) : Constante, peut importe le volume de donnée O(n) : Linéaire, fonction linéaire suivant le volume de donnée O(n2) : Quadratique, (ex: n x n) O(n!) : Factorielle (ex: 5! = 5x4x3x2x1)

Slide 15

Slide 15 text

try.redis.io

Slide 16

Slide 16 text

String

Slide 17

Slide 17 text

String : Commandes Clé / Valeur basique (style MemCacheD) ● GET ● SET ● GETSET ● INCR ● STRLEN ● ... http://redis.io/commands#string

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

String : Utilité ● Compteur ● Statistiques ● Nb de pages vues (pause < 60s) ○ INCR user:pageviews: ○ EXPIRE user:pageviews: 60 ● Cache ● BitMap (voir plus tard) ● ...

Slide 20

Slide 20 text

Hashes

Slide 21

Slide 21 text

Hashes : Commandes Clé + Clé / Valeur multiple maclé => [champ1 => valeur1, champ2 => valeur2] ● HSET / HGET ● HGETALL ● HDEL ● HKEYS ● HVALS ● ...

Slide 22

Slide 22 text

Hashes : Utilité ● Stockage d'objet et de ses attributs

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Sets

Slide 25

Slide 25 text

Sets : Commandes Clé + liste de valeurs uniques, non ordonnée maclé => [valeur5, valeur1, valeur3] ● SADD ● SMEMBERS ● SISMEMBER ● SREM ● ...

Slide 26

Slide 26 text

Sets : Utilité ● Retourner N items unique sur une période de temps (ex : Visiteurs Unique) ● ou sur une ressource donnée : ○ SADD page:day1: ○ SCARD page:day1: ○ SISMEMBER page:day1: ● Gestion de sécurisation par ip ● Union / intersection ● Gestion de tag : ○ SADD news:1000:tags 1 ○ SADD tag:1:objects 1000 ● ...

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Lists

Slide 29

Slide 29 text

Lists : Commandes Comme les sets mais par ordre d'insertion File/pile ou queue ● RPUSH / LPUSH ● RPOP / LPOP ● BRPOP / BLPOP ● LLEN

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Lists : Utilité ● Afficher les derniers items d'un listing sur votre HP : Eviter les order by time DESC limit ... ○ Ajout commentaire => LPUSH latest.comments ○ LTRIM latest.comments 0 5000 ○ LRANGE latest.comments (+ Fallback sur SQL) ● Timeline sociale ● Liste limitée à un nombre d'élément ○ (LPUSH/ LTRIM) ● Sortir les éléments dans l'ordre d'insertion ● https://github.com/resque/resque ...

Slide 32

Slide 32 text

Sorted Sets

Slide 33

Slide 33 text

Sorted Sets : Commandes Sets triés par un score utilisateur ● ZADD ● ZRANGE ● ZREVRANGE ● ZRANK ● ...

Slide 34

Slide 34 text

Sorted Sets : Exemple ● Leaderboard pour un jeux ● Utiliser l'âge des utilisateurs comme score pour avoir la liste des utilisateurs d'un intervalle d'âge ● Expire sur des items / Mécanisme d'érosion ○ Utilisation du timestamp d'expiration a la place du score ● Autocomplete : ○ http://oldblog.antirez.com/post/autocomplete-with- redis.html ● ...

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

Commandes Globales ● DEL ● KEYS ● EXPIRE ● PERSIST ● TTL ● SORT ● ... http://redis.io/commands

Slide 37

Slide 37 text

Structure Explication graphique des différentes structures

Slide 38

Slide 38 text

Pas encore impressionné ?

Slide 39

Slide 39 text

Publish / Subscribe (1/2) "PubSub (de l'anglais Publish-Subscribe) est un mécanisme de publication/souscription de messages dans lequel les émetteurs (publisher) ne destinent pas a priori les messages à des destinataires (subscriber) préalablement définis." Wikipédia : http://fr.wikipedia.org/wiki/PubSub

Slide 40

Slide 40 text

Publish / Subscribe (2/2) ● PUBLISH ● SUBSCRIBE / UNSUBSCRIBE ● PSUBSCRIBE / PUNSUBSCRIBE http://redis.io/topics/pubsub

Slide 41

Slide 41 text

BitMap ● BITOP (AND, OR, XOR, NOT) ● BITCOUNT ● GETBIT / SETBIT ● http://blog.getspool.com/2011/11/29/fast-easy- realtime-metrics-using-redis-bitmaps/ ● Bitter: github.com/jeremyFreeAgent/Bitter PHP Analytics library using Redis Bitmap

Slide 42

Slide 42 text

Pipelining Client : INCR X Server : 1 Client : INCR X Server : 2 Client : INCR X Server : 3 Client : INCR X Server : 4 Client : INCR X Client : INCR X Client : INCR X Client : INCR X Server : 1 Server : 2 Server : 3 Server : 4

Slide 43

Slide 43 text

Persistance ● Snapshot (RDB) ● Append-only file (AOF) http://redis.io/topics/persistence http://oldblog.antirez.com/post/redis-persistence- demystified.html

Slide 44

Slide 44 text

Transactions MULTI EXEC DISCARD WATCH

Slide 45

Slide 45 text

Lua ● Redis embarque un interpréteur LUA et permet d'évaluer du code. ● EVAL ● EVALSHA ● SCRIPT LOAD ● SCRIPT KILL ● ...

Slide 46

Slide 46 text

Quand MySql ne suffit plus : Redis peut être vraiment : ● Un complément à MySql ● Une alternative dans d'autres cas

Slide 47

Slide 47 text

Exemple : Structure Redis de Polls questions: Hash : ● id ● title ● image ● closing_date ● vote_count answers: Hash : ● id ● id_question ● title ● order ● image ● vote_count ● question_vote_count questions::answers Sets : questions:counter answers:counter

Slide 48

Slide 48 text

Exemple : Structure Redis Logiciels suivis clubic_sf_logi _ Hash : ● date ● titre ● id_photo ● url clubic_sf_logi_usr_ Sets : ● : ● : ● ...

Slide 49

Slide 49 text

Attention /!\ Normalisez vos clés ! clubic_sf:logiciel: clubic_sf:log_suivi:

Slide 50

Slide 50 text

Source / Liens ● redis.io ● try.redis.io ● http://fr.slideshare.net/dvirsky/kicking-ass-with-redis ● https://speakerdeck.com/jimbojsb/learn-to-love-redis ● http://moot.it/blog/technology/redis-as-primary-datastore-wtf.html ● http://www.redisgreen.net/blog/2013/02/18/redis-201/ ● http://highscalability.com/blog/2011/7/6/11-common-web-use-cases-solved-in- redis.html

Slide 51

Slide 51 text

Merci :-) ● Questions ?