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

Redis On Fire

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.

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