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

Redis, une base not only NoSQL

Redis, une base not only NoSQL

Présentation Tools-in-Action donnée à la conférence Devoxx France 2014, le 16 avril 2014.
Pattern, anti-pattern, cas d'usages de Redis, basé sur mon retour d'expérience.

Nicolas Martignole

April 16, 2014
Tweet

Other Decks in Programming

Transcript

  1. @nmartignole #DevoxxFR Redis, une base not only NoSQL @nmartignole Nicolas

    Martignole Le Touilleur Express / Devoxx France
  2. @nmartignole #DevoxxFR Tableau de score Classement de présentations pour une

    conférence Meilleur voter Nombre de sujets revus par personne
  3. @nmartignole #DevoxxFR Compteurs de vues, affichages Quel est le sujet

    le plus affiché ? Le présentateur le plus recherché sur le site ?
  4. @nmartignole #DevoxxFR it is fast ======  SET  ======    

     10000  requests  completed  in  0.09  seconds      50  parallel  clients      3  bytes  payload      keep  alive:  1   ! 100.00%  <=  0  milliseconds   106 382.98  requests  per  second   ! ======  GET  ======      10000  requests  completed  in  0.09  seconds      50  parallel  clients      3  bytes  payload      keep  alive:  1   ! 99.96%  <=  1  milliseconds   100.00%  <=  1  milliseconds   108 695.65  requests  per  second  
  5. @nmartignole #DevoxxFR Redis data type - 2/5 Clés Valeurs Proposal:XYZ-123

    {"id": 24, "author": "nic" String Page:View:XYZ-123 [nic,tom,nic,bob,anna,nic] List
  6. @nmartignole #DevoxxFR Redis data type - 4/5 Clés Valeurs Proposal:XYZ-123

    {"id": 24, "author": "nic" String Page:View:XYZ-123 [ Speakers:Nicolas Hash firstName => nicolas" lastName => Martignole" Twitter => @nmartignole List
  7. @nmartignole #DevoxxFR Redis data type - 4/5 Clés Valeurs Proposal:XYZ-123

    {"id": 24, "author": "nic" String Page:View:XYZ-123 List Speakers:NoSQL {nic, alexis, pierre} Set [ Speakers:Nicolas Hash firstName => lastName => Twitter =>
  8. @nmartignole #DevoxxFR Redis data type - 5/5 Clés Valeurs Proposal:XYZ-123

    {"id": 24, "author": "nic" String Page:View:XYZ-123 List [ SortedSet Votes:Proposal:XYZ-123 { bob => 3" chris => 5" antonio => 10} Speakers:Nicolas firstName => lastName => Twitter => Hash Speakers:NoSQL {nic, alexis, pierre} Set
  9. @nmartignole #DevoxxFR Redis data type - 5/5 Clés Valeurs Proposal:XYZ-123

    {"id": 24, "author": "nic"…} String Page:View:XYZ-123 List [nic,tom,nic,bob,anna,nic] SortedSet Votes:Proposal:XYZ-123 { bob => 3" chris => 5" antonio => 10} Speakers:Nicolas firstName => nicolas" lastName => Martignole" Twitter => @nmartignole Hash Speakers:NoSQL {nic, alexis, pierre} Set
  10. @nmartignole #DevoxxFR Pour tester •http://try.redis.io/ •Jedis, driver pour Java (https://github.com/xetorthio/jedis)

    •Sedis, driver pour Scala (https://github.com/pk11/sedis) •Zedis (driver Scala plus complet en cours par @nmartignole)
  11. @nmartignole #DevoxxFR See https://github.com/nicmarti/redis-sample-java Jedis  jedis  =  new  Jedis(hostname,  port);

      jedis.ping();   ! jedis.set("myKey",  "A  cool  value  »);   ! jedis.get(«  myKey");  //  a  cool  value   ! jedis.setex("myKeyThatWillExpire",  5,  "this  value  expires  in  5  seconds");   !
  12. @nmartignole #DevoxxFR Jedis  jedis  =  new  Jedis(hostname,  port);   jedis.ping();

      ! jedis.set("myKey",  "A  cool  value  »);   ! jedis.get(«  myKey");  //  a  cool  value   ! jedis.setex("myKeyThatWillExpire",  5,  "this  value  expires  in  5  seconds");   !
  13. @nmartignole #DevoxxFR Jedis  jedis  =  new  Jedis(hostname,  port);   jedis.ping();

      ! jedis.set("myKey",  "A  cool  value  »);   ! jedis.get(«  myKey");  //  a  cool  value   ! jedis.setex("myKeyThatWillExpire",  5,  "this  value  expires  in  5  seconds");   !
  14. @nmartignole #DevoxxFR Jedis  jedis  =  new  Jedis(hostname,  port);   jedis.ping();

      ! jedis.set("myKey",  "A  cool  value  »);   ! jedis.get(«  myKey");  //  a  cool  value   ! jedis.setex("myKeyThatWillExpire",  5,  "this  value  expires  in  5  seconds");   !
  15. @nmartignole #DevoxxFR Get/Set  @Test          public  void

     setAndGetSimpleValue()  {                  Jedis  jedis  =  new  Jedis(hostname,  port);                  jedis.select(redisDB);   !                assertThat(jedis.get("myKey")).isNull();   !                jedis.set("myKey",  "A  super  value");   !                assertThat(jedis.get("myKey")).isNotEmpty();                  assertThat(jedis.get("myKey")).isEqualTo("A  super  value");   !                assertThat(jedis.get("anotherKey")).isNull();   !                jedis.setex("myKeyThatWillExpire",  5,  "this  value  expires  in  5  seconds");                  assertThat(jedis.get("myKeyThatWillExpire")).isNotNull();          }  
  16. @nmartignole #DevoxxFR Conclusion •Redis est un serveur de données structurées

    •Simple à utiliser et à apprendre •Propose des structures « naturelles" pour le développeur Java •Rapide, puissant •Redis peut être utilisé comme base principale ! •Essayez lundi : http://try.redis.io