Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Redis On Fire

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Redis On Fire

Introduction aux différentes fonctionnalités de Redis avec des exemples d’usage, où Redis pourrait simplifier une fonctionnalité difficile à rendre performante avec du MySql classique.

Avatar for kennydee

kennydee

April 26, 2013
Tweet

More Decks by kennydee

Other Decks in Programming

Transcript

  1. NoSql : Les grandes familles • Clé/Valeur ◦ MemcacheD ◦

    Redis • Colonne ◦ BigTable ◦ Hbase ◦ Cassandra • Document ◦ MongoDb ◦ CouchDb/CouchBase ◦ Riak • Graph ◦ Neo4j ◦ FlockDb ◦ Titan
  2. En production chez Eux : • Github • Craiglist •

    YouPorn • Blizzard • TweetDeck • Disqus • flickr • Stackoverflow ... Nous : • ... • Achetezfacile • MF/M6info/Clubic(en cache) et bientôt : • ...
  3. 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)
  4. String : Commandes Clé / Valeur basique (style MemCacheD) •

    GET • SET • GETSET • INCR • STRLEN • ... http://redis.io/commands#string
  5. String : Utilité • Compteur • Statistiques • Nb de

    pages vues (pause < 60s) ◦ INCR user:pageviews:<id> ◦ EXPIRE user:pageviews:<id> 60 • Cache • BitMap (voir plus tard) • ...
  6. Hashes : Commandes Clé + Clé / Valeur multiple maclé

    => [champ1 => valeur1, champ2 => valeur2] • HSET / HGET • HGETALL • HDEL • HKEYS • HVALS • ...
  7. Sets : Commandes Clé + liste de valeurs uniques, non

    ordonnée maclé => [valeur5, valeur1, valeur3] • SADD • SMEMBERS • SISMEMBER • SREM • ...
  8. Sets : Utilité • Retourner N items unique sur une

    période de temps (ex : Visiteurs Unique) • ou sur une ressource donnée : ◦ SADD page:day1:<page_id> <user_id> ◦ SCARD page:day1:<page_id> ◦ SISMEMBER page:day1:<page_id> • Gestion de sécurisation par ip • Union / intersection • Gestion de tag : ◦ SADD news:1000:tags 1 ◦ SADD tag:1:objects 1000 • ...
  9. Lists : Commandes Comme les sets mais par ordre d'insertion

    File/pile ou queue • RPUSH / LPUSH • RPOP / LPOP • BRPOP / BLPOP • LLEN
  10. Lists : Utilité • Afficher les derniers items d'un listing

    sur votre HP : Eviter les order by time DESC limit ... ◦ Ajout commentaire => LPUSH latest.comments <ID> ◦ 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 ...
  11. Sorted Sets : Commandes Sets triés par un score utilisateur

    • ZADD • ZRANGE • ZREVRANGE • ZRANK • ...
  12. 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 • ...
  13. Commandes Globales • DEL • KEYS • EXPIRE • PERSIST

    • TTL • SORT • ... http://redis.io/commands
  14. 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
  15. Publish / Subscribe (2/2) • PUBLISH • SUBSCRIBE / UNSUBSCRIBE

    • PSUBSCRIBE / PUNSUBSCRIBE http://redis.io/topics/pubsub
  16. 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
  17. 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
  18. Lua • Redis embarque un interpréteur LUA et permet d'évaluer

    du code. • EVAL • EVALSHA • SCRIPT LOAD • SCRIPT KILL • ...
  19. Quand MySql ne suffit plus : Redis peut être vraiment

    : • Un complément à MySql • Une alternative dans d'autres cas
  20. Exemple : Structure Redis de Polls questions:<id> Hash : •

    id • title • image • closing_date • vote_count answers:<id> Hash : • id • id_question • title • order • image • vote_count • question_vote_count questions:<id>:answers Sets : questions:counter answers:counter
  21. Exemple : Structure Redis Logiciels suivis clubic_sf_logi _<Software_id> Hash :

    • date • titre • id_photo • url clubic_sf_logi_usr_<User_id> Sets : • <software_id> : <date_maj> • <software_id> : <date_maj> • ...
  22. 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