Redis

1,303 views
1,236 views

Published on

Overview do Redis apresentado no V Pylestras do PUG-CE

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,303
On SlideShare
0
From Embeds
0
Number of Embeds
709
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Redis

  1. 1. Redis: Uma visão geral Junior Ribeiro V Pylestras
  2. 2. whoami Desenvolvedor/Líder Técnico em projetos voltados para Gestão de Conteúdo e PortaisBacharel em Sistemas de Informação – FICTwitter: fjunior87Linkedin: br.linkedin.com/in/fribeiroBlog: http://xicojunior.wordpress.comEmail: fjunior87@gmail.com
  3. 3. Redis• Criado por Salvatore Sanfilippo(@antirez)• Primeira Release em março de 2009• Patrocinado pela VM Ware• Atualmente na versão 2.4.17
  4. 4. Redis• REmote DIctionary Server• Key-Value Store - Dicionário(hash) Remoto• Suporta outras estruturas de dados – List, set, hash, ordered set• DataStructure Server• Publish/Subscribe• Expires
  5. 5. Redis • Em memória... Muito, muito rápido!!!! – Mas persiste os dados em disco – Snapshoting – Requer bastante RAM dependendo da quantidade de dados • Non-Blocking I/O • Single-Threaded • 100.000+ operações de leitura e escrita/segundo[1][1]http://simonwillison.net/static/2010/redis-tutorial/
  6. 6. Redis
  7. 7. Redis• Por onde iniciar? – http://try.redis-db.com/• Instalação – Download e unzip – Iniciar o server: ./redis-server ou redis- server.exe(WIN) – Iniciar o client: ./redis-cli ou redis-cli.exe(Win)• Muito simples!!!
  8. 8. Chaves e Valores• Chaves são utilizadas para identificar dados no Redis(String) – Ex: server:name, user:1• Valores estão associados com as chaves – String, Integer, Estrutura de Dado – JSON, XML, whatever... – Strings são byte arrays
  9. 9. Chaves e Valores• Associando valores a chavesset server:name myhostnameset user:1 „{“nome”:”junior”,”username”:”fjunior87”}‟
  10. 10. Chaves e Valores• Obtendo o valor de uma chaveget server:nameget user:1
  11. 11. Comandos• GET • TYPE• SET • EXISTS• SETNX • DEL• GETSET • EXPIRE• MGET • EXPIREAT• MSET • TTL• INCR/INCRBY• DECR/DECRBY
  12. 12. Comandossetnx foo bar //OK!setnx foo bar2 //NoK!//setar varias chavesmset dia 06 mes 10 ano 2012//obter varias chavesmget dia mes ano
  13. 13. Comandos//setar novo valor e obter o antigoset var valorgetset var novovalor //retorna „valor‟//Contadorincr user:idsdecr user:1:convites
  14. 14. Comandos//checando o tipo da chavetype ano//deletando uma chavedel ano//checando existencia de um chaveexists blah
  15. 15. Caching• Redis como um Cache store – EXPIRE, EXPIREAT, TTLSET last_page <html></html>EXPIRE last_page 60TTL last_page
  16. 16. Caching• SETEX setex last_page 60 <html></html> ttl last_page
  17. 17. Listas• LPUSH/RPUSH• LLEN• LPOP/RPOP• LRANGE• LINDEX• LTRIM
  18. 18. Listas//adicionando elementos ao iniciolpush linguagem python//adicionando ao finalrpush linguagem javarpush linguagem ruby//obtendo todos os elementoslrange linguagem 0 -1
  19. 19. Lista//removendo do iniciolpop linguagem//removendo do fimrpop linguagem//trimltrim linguagem 0 1
  20. 20. Lista//Uma fila simples - FIFOlpush fila primeirolpush fila segundolpush fila terceirorpop fila //primeirorpop fila //segundo
  21. 21. Set• Conjunto de Strings• Não ordenados• Sem duplicatas
  22. 22. Set• sadd• smembers• Scard• Spop• srandmember• sismember• srem
  23. 23. Set//adicionando amigossadd friends:junior fabiosadd friends:junior manolo doespop friends:juniorsrandmember friends:junior//checando se amigosismemeber friends:junior fabio
  24. 24. Set//removendo amigosrem friends:junior manolo//checando qtde de amigosScard friends:manolo
  25. 25. SET• SUNION/SUNIONSTORE• SDIFF/SDIFFSTORE• SINTER/SINTERSTORE• Podem ser aplicadas mais de 2 chaves nas operações
  26. 26. Set//Amigos em comumsinter friends:junior friends:manolo//armazenar o resultado em outra chavesinterstore chave_destino friends:junior friends:manolo
  27. 27. Set//amigos do manolo que não são amigos do jrSDIFF friends:manolo friends:junior//todos os amigos do manolo e juniorSUNION friends:manolo friends:junior
  28. 28. Sorted Set• zset• Similar ao SET• Cada elemento possui um score• Podemos consultar pelo score ou intervalo de scores em qualquer direção (bottom/top)
  29. 29. Sorted Set• ZADD• ZREM• ZCARD• ZSCORE• ZINCRBY• ZRANK• ZREVRANK
  30. 30. Sorted Setzadd urna:1 0 tiriricazadd urna:1 0 maluf//numero de votos do candidatozscore urna:1 maluf//votando num candidatozincrby urna:1 1 tiririca
  31. 31. Sorted Set• ZRANGE• ZREVRANGE• ZRANGEBYSCORE• [WITHSCORES]
  32. 32. Sorted Set//obter os 3 menos votadosZRANGE urna:1 0 2//obter os 3 menos votados com scoreZRANGE urna:1 0 2 WITHSCORES//obter os 3 mais votadosZREVRANGE urna:1 0 2 WITHSCORES
  33. 33. Sorted Set//candidatos com numero de votos entre 20 e 50zrangebyscore urna:1 20 50zrangebyscore urna:1 20 50 WITHSCORES
  34. 34. Sorted Sets• zunionstore• zinterstore• Aggregate sum|max|min
  35. 35. Sorted Set//total de votos dos candidatoszunionstore urnatotal 2 urna:1 urna:2zrevrange urnatotal 0 -1 withscores
  36. 36. Hash• Como o nome já diz• Fields• Ideal para armazenar objetos – Mais flexibilidade do que objetos serializados – Podendo obter/atualizar valores de campos específicos
  37. 37. Hash• HSET/HGET• HMSET• HKEYS• HGETALL• HINCRBY• HDEL
  38. 38. Hash//Armazenando um usuariohset user:1 nome juniorhset user:1 username fjunior87//setando varios fieldshmset user:1 password 1234 idade 25
  39. 39. Hashes//obtendo o nomehget user:1 nome//obtendo mais de um campohmget user:1 idade password//obtendo todoshgetall user:1
  40. 40. Pipeline• A cada comando o cliente aguarda a resposta sadd users junior sadd users manolo smembers users• Acima temos 3 trips• RTT – Round Trip Time• Redis suporta pipelining• Vários comandos enviados sem esperar por suas respostas – batch de comandos• Minimiza overhead de rede
  41. 41. Pipeline• Exemplo usando a biblioteca redis-pyr=redis.Redis()pipe=r.pipe ()for i in range(10000): pipe.ping()pipe.execute()
  42. 42. Transaction• Permitem a execução de um grupo de comandos de forma atômica• 2 garantias – Comandos executados sequencialmente sem interferência – Tudo ou nada – Ou todos são executados ou nenhum
  43. 43. Transaction• MULTI• EXEC
  44. 44. Transactionr = redis.Redis()pipe = r.pipeline(transaction=True)next_id = pipe.incr("user:ids")pipe.hset("user:%s"%next_id,"nome","junior")pipe.execute()
  45. 45. Publish/Subscribe• Redis suporta publish/subscribepublishsubscribepsubscribeunsubscribepunsubscribe
  46. 46. Publish/Subscribe//em uma janela redis-clisubscribe warnings//em outra janelapublish warnings “o sistema miou!”
  47. 47. Publish/Subscribe//subscribe com padrãopsubscribe warnings:*//subscribe multiplos channelssubscribe channel1 channel2 ...
  48. 48. Casos de Uso• Contador – Quando bloquear um IP – Page Views – Podemos utilizar o comando INCR incr acess:127.0.0.1:06-10-2012 url = md5(url) incr views:url:06-10-2012 Incr views:06-10-2012
  49. 49. Casos de Uso• Sessões Web – Redis para armazenar os dados de sessão hset session:as242dsd user fjunior87 displayname junior Expire session:as242dsd 1800 – django-redis-sessions
  50. 50. Casos de Uso• Caching – Podendo ser usado da mesma forma que o memcache – django-redis-cache
  51. 51. Casos de Uso• Message Queue – LPUSH – RPOP – BRPOP – BLPOP – Resque - ruby – RestMQ – Pytho n(Twisted, Cyclone)
  52. 52. Referências• http://simonwillison.net/static/2010/redis- tutorial/• http://highscalability.com/blog/2011/7/6/11- common-web-use-cases-solved-in-redis.html• http://www.paperplanes.de/2010/2/16/a_coll ection_of_redis_use_cases.html• http://rediscookbook.org/
  53. 53. ??????
  54. 54. Obrigado!!

×