Redis – What, Why, When, How?

1.959 visualizações

Publicada em

Palestra apresentada no PHPUB (evento mensal de PHP do grupo PHPSP) do mês de agosto de 2012

Publicada em: Tecnologia
0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.959
No SlideShare
0
A partir de incorporações
0
Número de incorporações
19
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Redis – What, Why, When, How?

  1. 1. Redis What? Why? When? How?segunda-feira, 27 de agosto de 12
  2. 2. About • Software Engineer: Dafiti • Developer: About 10 • php.net, MeeGo, phpsp, fedora project, NoSQL BR, * • Zend Certified Engineer, Husband and Daddysegunda-feira, 27 de agosto de 12
  3. 3. Redis • Memcachedsegunda-feira, 27 de agosto de 12
  4. 4. Obrigadosegunda-feira, 27 de agosto de 12
  5. 5. Wha t Dafuck Redis?segunda-feira, 27 de agosto de 12
  6. 6. Wha t Dafuck Redis? • Remote Dictionary Serversegunda-feira, 27 de agosto de 12
  7. 7. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valorsegunda-feira, 27 de agosto de 12
  8. 8. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operaçõessegunda-feira, 27 de agosto de 12
  9. 9. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações • Um servidor de estrutura de dadossegunda-feira, 27 de agosto de 12
  10. 10. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações • Um servidor de estrutura de dados • ... tem pub/sub e notificaçõessegunda-feira, 27 de agosto de 12
  11. 11. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações • Um servidor de estrutura de dados • ... tem pub/sub e notificações • Um bus de evento sem bloqueiosegunda-feira, 27 de agosto de 12
  12. 12. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações • Um servidor de estrutura de dados • ... tem pub/sub e notificações • Um bus de evento sem bloqueio • Uma memória compartilhada acessível via redesegunda-feira, 27 de agosto de 12
  13. 13. Wha t Um canivete suíçosegunda-feira, 27 de agosto de 12
  14. 14. Wha t Seja o que for... • Mothafuckamente rápido! • Non-blocking I/O, um único segmento • 100,000+ escrita/leitura por segundo • Pequeno: ~16,000 linhas de código C • Escala para “baixo”: Amigável até mesmo com um simples VPS • Faz um novo tipo de recurso - em particular para escritas pesadas - viável para pequenas aplicações • Complementa sua camada de armazenamentosegunda-feira, 27 de agosto de 12
  15. 15. Wha t Breve histórico • Breve mesmo...segunda-feira, 27 de agosto de 12
  16. 16. Wha t Breve histórico • Criado por Salvatore Sanfilippo ( antirez ) • Primeiro release: Março/2009 • “Adquirido” pela VMWare em Março de 2010 • Open Source ( BSD )segunda-feira, 27 de agosto de 12
  17. 17. Wha t Agenda! • Como funciona • Tipos de dados • Utilidade • PHP • Úteissegunda-feira, 27 de agosto de 12
  18. 18. Wha t Inicio de tudo! $ git clone git://github.com/antirez/redis $ cd redis $ make $ ./redis-serversegunda-feira, 27 de agosto de 12
  19. 19. t Whasegunda-feira, 27 de agosto de 12
  20. 20. Wha t Chaves • Chaves não devem conter espaços em branco! • ( essa restrição foi removida na versão 1.2) • Chaves curtas performam melhor • Convenção comum: tipo-de-objeto:id:campo • user:23:username = manolo • SHA1(data) Pode ser uma chave útil tambémsegunda-feira, 27 de agosto de 12
  21. 21. Wha t Tipos de dadossegunda-feira, 27 de agosto de 12
  22. 22. Wha t Tipos de dados • Binary-safe strings ( até 10GB ) • listas • conjuntos • Conjuntos sortidos • (Cada chave possuí uma pontuação) • hashes • Canais pub/subsegunda-feira, 27 de agosto de 12
  23. 23. t Wha Os tipos de dados propriamente ditos!!!segunda-feira, 27 de agosto de 12
  24. 24. Wha t Strings SET name Kinn SET age 23 MGET name age > Kinn >23 GETSET name Kinncj > Kinnsegunda-feira, 27 de agosto de 12
  25. 25. Wha t Strings SETEX age 3 20 GET age > 20 // .. 3 segundos após GET age > nullsegunda-feira, 27 de agosto de 12
  26. 26. Wha t Inteiros INCR count >1 INCR count >2 INCRBY count 3 >5segunda-feira, 27 de agosto de 12
  27. 27. Wha t Hashes HMSET user name Kinn email kinncj@php.net HGET user email > kinncj@php.net HKEYS user > name > email HGETALL user > name > Kinn > email > kinncj@php.netsegunda-feira, 27 de agosto de 12
  28. 28. Wha t Listas RPUSH admins Kinn >1 RPUSH admins Manolo >2 LINDEX admins 0 > Kinn LLEN admins >2 RPOP admins > Manolosegunda-feira, 27 de agosto de 12
  29. 29. Wha t Conjuntos SADD page:3:visitors 134 >1 SADD page:3:visitors 253 >1 SADD page:3:visitors 253 >0 SCARD page:3:visitors >2 SMEMBERS page:3:visitors > 134 > 253 SISMEMBER page:3:visitors 349 >0segunda-feira, 27 de agosto de 12
  30. 30. Wha t Conjuntos SADD page:6:visitors 253 SADD page:6:visitors 923 SADD page:6:visitors 13 SINTER page:3:visitors page:6:visitors > 253segunda-feira, 27 de agosto de 12
  31. 31. Wha t Conjuntos sortidos ZADD highscores 2930 Kinn ZADD highscores 1500 Manolo ZREVRANGE highscores 0 10 WITHSCORES > Kinn > 2930 > Manolo > 1500segunda-feira, 27 de agosto de 12
  32. 32. Wha t Exemplo Listas array(‘foo’, ‘bar’); Conjuntos suffle(array(‘foo’, ‘bar’)); Conjuntos sortidos ksort(array(3 => ‘foo’, 1 => ‘bar’));segunda-feira, 27 de agosto de 12
  33. 33. Why Os tipos básicos de cada linguagem existem no redissegunda-feira, 27 de agosto de 12
  34. 34. Why Processe dados no redis ao invés do PHPsegunda-feira, 27 de agosto de 12
  35. 35. Why “SQL” no redissegunda-feira, 27 de agosto de 12
  36. 36. Why SORT - SQL em seu NoSQL SORT chave SORT chave LIMIT 0 10 DESC SORT chave ALPHA SORT page:6:visitors BY user_*->rank GET user_* DESCsegunda-feira, 27 de agosto de 12
  37. 37. Why Pub/Subsegunda-feira, 27 de agosto de 12
  38. 38. Why Pub/Sub • Redis faz BroadCast!!!!!!segunda-feira, 27 de agosto de 12
  39. 39. Why Pub/Sub SUBSCRIBE mensagem SUBSCRIBE chan1 chan2 chan3 PUBLISH mensagem “Ola Mundo” PSUBSCRIBE chat.*segunda-feira, 27 de agosto de 12
  40. 40. Why Goodiessegunda-feira, 27 de agosto de 12
  41. 41. Why Goodies • Replicação Master/Slave • Transações: MULTI / EXEC / DISCARDsegunda-feira, 27 de agosto de 12
  42. 42. Why Future Goodiessegunda-feira, 27 de agosto de 12
  43. 43. Why Future Goodies • Lua Scripting: EVALsegunda-feira, 27 de agosto de 12
  44. 44. Why Future Goodies : Clustersegunda-feira, 27 de agosto de 12
  45. 45. Why Future Goodies : Cluster • Redis Cluster ( Tão atrasado quanto o PHP 6 )segunda-feira, 27 de agosto de 12
  46. 46. Why Future Goodies : Cluster Velocidade Redis é rápido É muito improvável que CPU seja gargalosegunda-feira, 27 de agosto de 12
  47. 47. Why Future Goodies : Cluster Velocidadesegunda-feira, 27 de agosto de 12
  48. 48. Why Future Goodies : Cluster Redis é rápidosegunda-feira, 27 de agosto de 12
  49. 49. Why Future Goodies : Cluster É muito improvável que CPU seja gargalosegunda-feira, 27 de agosto de 12
  50. 50. Why Future Goodies : Cluster O que você faz quando está sem RAM?segunda-feira, 27 de agosto de 12
  51. 51. Why Future Goodies : Cluster Esperar pelo cluster Redis? Se você puder... o Cluster é parece ser ótimosegunda-feira, 27 de agosto de 12
  52. 52. Why Goodie! Armazena em memória. Backup em disco.segunda-feira, 27 de agosto de 12
  53. 53. Whe n 2 centavos Armazene em disco. Carregue hot-data na memória.segunda-feira, 27 de agosto de 12
  54. 54. Whe n Uso • WEB SCALE • THE CLOUD • NOSQL • ELASTIC • HORIZONTAL SCALING • VERTICAL TOOsegunda-feira, 27 de agosto de 12
  55. 55. Whe n Uso • WEB SCALE • THE CLOUD • NOSQL • ELASTIC • HORIZONTAL SCALING • VERTICAL TOOsegunda-feira, 27 de agosto de 12
  56. 56. n Whe BULLSHITsegunda-feira, 27 de agosto de 12
  57. 57. Whe n Caia na real Se você precisa escalar, sua base de dados não vai magicamente fazer isso por vocêsegunda-feira, 27 de agosto de 12
  58. 58. Whe n Uso Então para que realmente ele é bom?segunda-feira, 27 de agosto de 12
  59. 59. Whe n Uso • Armazenamento de sessões • Cache • Qualquer outra coisa que o memcached façasegunda-feira, 27 de agosto de 12
  60. 60. Whe n Uso • Cache: Site de noticias • Leituras caras • Mudança rápida de páginas • Tracking dinâmico do que o usuário está fazendosegunda-feira, 27 de agosto de 12
  61. 61. Whe n Uso • Cache: Site de noticias Cacheando resultados genéricos: SETEX <id da página>:content 600 <dados>segunda-feira, 27 de agosto de 12
  62. 62. Whe n Uso • Fila BRPOP fila LPUSH fila “descrição do job” ex: Lib resque do GitHub https://github.com/defunkt/resque/segunda-feira, 27 de agosto de 12
  63. 63. Whe n Aplicações • Ajax pooling / Long pooling • Serviço de compartilhamento de diretório ( GitHub) • CSRF tokens • Tokens temporários de OAuth • Cache • Chatsegunda-feira, 27 de agosto de 12
  64. 64. Whe n Aplicações • Github • Flickr • PHPad ;)segunda-feira, 27 de agosto de 12
  65. 65. How E o PHP? Entra aonde?segunda-feira, 27 de agosto de 12
  66. 66. How PHP + Redis Extensão phpredis http://github.com/nicolasff/phpredissegunda-feira, 27 de agosto de 12
  67. 67. How phpredis • Session handler • up to datesegunda-feira, 27 de agosto de 12
  68. 68. How phpredis $redis = new Redis(); $redis->connect(‘127.0.0.1’, 6379); $redis->watch(‘user’); $result = $redis->multi() ->set(‘user’, ‘manolo’) ->exec(); echo $result !== false ? ‘Success’ : ‘Shit happens’; echo $redis->get(‘user’);segunda-feira, 27 de agosto de 12
  69. 69. How PHP + Redis Extensão phpiredis http://github.com/seppo0010/phpiredissegunda-feira, 27 de agosto de 12
  70. 70. How phpiredis • Parsing de protocolo • Baixo nívelsegunda-feira, 27 de agosto de 12
  71. 71. How phpiredis $redis = phpiredis_connect(‘127.0.0.1’, 6379); phpiredis_command($redis, ‘WATCH user’); phpiredis_command($redis, ‘MULTI’); $user = “manolo”; phpiredis_command($redis, ‘SET user ‘.$user); $result = phpiredis_command($redis, ‘EXEC’); echo $result !== false ? ‘Success’ : ‘Shit happens’; echo phpiredis_command($redis, ‘GET user’);segunda-feira, 27 de agosto de 12
  72. 72. How PHP + Redis Extensão Predis http://github.com/nrk/predissegunda-feira, 27 de agosto de 12
  73. 73. How Predis • Master/Slave auto select • Pode fazer uso do phpiredis para parsing • Symfony bundlesegunda-feira, 27 de agosto de 12
  74. 74. How PHP + Redis Doctrine cache layersegunda-feira, 27 de agosto de 12
  75. 75. How Doctrine • Cache de query results diretamente no redis.segunda-feira, 27 de agosto de 12
  76. 76. How Redis • É rápido! • É divertido! • Try-it try.redis-db.comsegunda-feira, 27 de agosto de 12
  77. 77. How Obrigado @kinncj kinncj@php.netsegunda-feira, 27 de agosto de 12

×