SlideShare ist ein Scribd-Unternehmen logo
1 von 77
Redis
                                    What? Why? When? How?



segunda-feira, 27 de agosto de 12
About

                   • Software Engineer: Dafiti
                   • Developer: About 10
                   • php.net, MeeGo, phpsp, fedora project,
                           NoSQL BR, *
                   • Zend Certified Engineer, Husband and
                           Daddy


segunda-feira, 27 de agosto de 12
Redis



                   • Memcached




segunda-feira, 27 de agosto de 12
Obrigado




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Dafuck Redis?




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Dafuck Redis?
                • Remote Dictionary Server




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Dafuck Redis?
                • Remote Dictionary Server
                • Armazenamento chave-valor




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Dafuck Redis?
                • Remote Dictionary Server
                • Armazenamento chave-valor
                  • ... lista e executa operações




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Dafuck Redis?
                • Remote Dictionary Server
                • Armazenamento chave-valor
                  • ... lista e executa operações
                • Um servidor de estrutura de dados




segunda-feira, 27 de agosto de 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




segunda-feira, 27 de agosto de 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




segunda-feira, 27 de agosto de 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
                        rede



segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Um canivete suíço




segunda-feira, 27 de agosto de 12
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 armazenamento

segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Breve histórico



                   • Breve mesmo...




segunda-feira, 27 de agosto de 12
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
Wha
                   t
                                    Agenda!

              • Como funciona
              • Tipos de dados
              • Utilidade
              • PHP
              • Úteis


segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Inicio de tudo!
              $ git clone git://github.com/antirez/redis

              $ cd redis

              $ make

              $ ./redis-server




segunda-feira, 27 de agosto de 12
t
             Wha




segunda-feira, 27 de agosto de 12
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ém

segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Tipos de dados




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Tipos de dados
                   • Binary-safe strings ( até 10GB )
                          • listas
                          • conjuntos
                   • Conjuntos sortidos
                          • (Cada chave possuí uma pontuação)
                   • hashes
                   • Canais pub/sub

segunda-feira, 27 de agosto de 12
t
             Wha




     Os tipos de dados propriamente ditos!!!




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Strings

                       SET name Kinn
                       SET age 23
                       MGET name age
                       > Kinn
                       >23
                       GETSET name Kinncj
                       > Kinn



segunda-feira, 27 de agosto de 12
Wha
                   t
                                     Strings


                       SETEX age 3 20
                       GET age
                       > 20
                       // .. 3 segundos após
                       GET age
                       > null




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Inteiros


                       INCR count
                       >1
                       INCR count
                       >2
                       INCRBY count 3
                       >5




segunda-feira, 27 de agosto de 12
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.net




segunda-feira, 27 de agosto de 12
Wha
                   t
                                             Listas

                       RPUSH admins Kinn
                       >1
                       RPUSH admins Manolo
                       >2
                       LINDEX admins 0
                       > Kinn
                       LLEN admins
                       >2
                       RPOP admins
                       > Manolo




segunda-feira, 27 de agosto de 12
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
                       >0




segunda-feira, 27 de agosto de 12
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
                       > 253




segunda-feira, 27 de agosto de 12
Wha
                   t
                                    Conjuntos sortidos


                       ZADD highscores 2930 Kinn
                       ZADD highscores 1500 Manolo
                       ZREVRANGE highscores 0 10 WITHSCORES
                       > Kinn
                       > 2930
                       > Manolo
                       > 1500




segunda-feira, 27 de agosto de 12
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
Why




                                      Os tipos básicos de cada
                                    linguagem existem no redis




segunda-feira, 27 de agosto de 12
Why




                                    Processe dados no redis ao
                                          invés do PHP




segunda-feira, 27 de agosto de 12
Why




                                    “SQL” no redis




segunda-feira, 27 de agosto de 12
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_* DESC




segunda-feira, 27 de agosto de 12
Why
                                    Pub/Sub




segunda-feira, 27 de agosto de 12
Why
                                    Pub/Sub



                • Redis faz BroadCast!!!!!!




segunda-feira, 27 de agosto de 12
Why
                                      Pub/Sub



                     SUBSCRIBE mensagem
                     SUBSCRIBE chan1 chan2 chan3
                     PUBLISH mensagem “Ola Mundo”
                     PSUBSCRIBE chat.*




segunda-feira, 27 de agosto de 12
Why
                                    Goodies




segunda-feira, 27 de agosto de 12
Why
                                    Goodies



                • Replicação Master/Slave
                • Transações: MULTI / EXEC / DISCARD




segunda-feira, 27 de agosto de 12
Why
                                    Future Goodies




segunda-feira, 27 de agosto de 12
Why
                                    Future Goodies



                • Lua Scripting: EVAL




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster



                • Redis Cluster ( Tão atrasado quanto o
                        PHP 6 )




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster

                                 Velocidade
                                Redis é rápido
                    É muito improvável que CPU seja gargalo




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster


                                    Velocidade




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster


                                    Redis é rápido




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster


                   É muito improvável que CPU seja gargalo




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster


                       O que você faz quando está sem RAM?




segunda-feira, 27 de agosto de 12
Why
                 Future Goodies : Cluster

                              Esperar pelo cluster Redis?
                         Se você puder... o Cluster é parece ser
                                          ótimo




segunda-feira, 27 de agosto de 12
Why
                                        Goodie!


                                    Armazena em memória.
                                      Backup em disco.




segunda-feira, 27 de agosto de 12
Whe
                   n
                                          2 centavos


                                         Armazene em disco.
                                    Carregue hot-data na memória.




segunda-feira, 27 de agosto de 12
Whe
                   n
                                    Uso
                   • WEB SCALE
                   • THE CLOUD
                   • NOSQL
                   • ELASTIC
                   • HORIZONTAL SCALING
                   • VERTICAL TOO

segunda-feira, 27 de agosto de 12
Whe
                   n
                                    Uso
                   • WEB SCALE
                   • THE CLOUD
                   • NOSQL
                   • ELASTIC
                   • HORIZONTAL SCALING
                   • VERTICAL TOO

segunda-feira, 27 de agosto de 12
n
             Whe




                                    BULLSHIT




segunda-feira, 27 de agosto de 12
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
Whe
                   n
                                        Uso


                          Então para que realmente ele é bom?




segunda-feira, 27 de agosto de 12
Whe
                   n
                                      Uso


                   • Armazenamento de sessões
                   • Cache
                   • Qualquer outra coisa que o
                           memcached faça




segunda-feira, 27 de agosto de 12
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á fazendo



segunda-feira, 27 de agosto de 12
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
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
Whe
                   n
                                    Aplicações
                   • Ajax pooling / Long pooling
                   • Serviço de compartilhamento de
                           diretório ( GitHub)

                   • CSRF tokens
                   • Tokens temporários de OAuth
                   • Cache
                   • Chat

segunda-feira, 27 de agosto de 12
Whe
                   n
                                    Aplicações


                   • Github
                   • Flickr
                   • PHPad ;)



segunda-feira, 27 de agosto de 12
How
                                    E o PHP?


                                    Entra aonde?




segunda-feira, 27 de agosto de 12
How
                                       PHP + Redis


                                         Extensão phpredis
                                    http://github.com/nicolasff/phpredis




segunda-feira, 27 de agosto de 12
How
                                    phpredis



                   • Session handler
                   • up to date




segunda-feira, 27 de agosto de 12
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
How
                                         PHP + Redis


                                         Extensão phpiredis
                                    http://github.com/seppo0010/phpiredis




segunda-feira, 27 de agosto de 12
How
                                    phpiredis



                   • Parsing de protocolo
                   • Baixo nível




segunda-feira, 27 de agosto de 12
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
How
                                    PHP + Redis


                                      Extensão Predis
                                    http://github.com/nrk/predis




segunda-feira, 27 de agosto de 12
How
                                     Predis


                   • Master/Slave auto select
                   • Pode fazer uso do phpiredis para
                           parsing

                   • Symfony bundle



segunda-feira, 27 de agosto de 12
How
                                    PHP + Redis


                                    Doctrine cache layer




segunda-feira, 27 de agosto de 12
How
                                       Doctrine



                   • Cache de query results diretamente
                           no redis.




segunda-feira, 27 de agosto de 12
How
                                    Redis


                   • É rápido!
                   • É divertido!
                   • Try-it try.redis-db.com



segunda-feira, 27 de agosto de 12
How
                                    Obrigado
                                       @kinncj
                                    kinncj@php.net




segunda-feira, 27 de agosto de 12

Weitere ähnliche Inhalte

Andere mochten auch

Integrando aplicações com redis
Integrando aplicações com redisIntegrando aplicações com redis
Integrando aplicações com redisFelipe Monteiro
 
Escalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShiftEscalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShiftGetup Cloud
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Otávio Santana
 
Escalando Aplicações com Redis
Escalando Aplicações com RedisEscalando Aplicações com Redis
Escalando Aplicações com RedisWaldyr Felix
 
Algumas das principais características do NoSQL
Algumas das principais características do NoSQLAlgumas das principais características do NoSQL
Algumas das principais características do NoSQLEric Silva
 
Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoAllisson Azevedo
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à práticaMario Guedes
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Ismar Silveira
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Sistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas ComputacionaisSistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas ComputacionaisMauro Duarte
 
Sistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e ParalelaSistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e ParalelaAdriano Teixeira de Souza
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Building Automated REST APIs with Python
Building Automated REST APIs with PythonBuilding Automated REST APIs with Python
Building Automated REST APIs with PythonJeff Knupp
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafosPriscila Mayumi
 

Andere mochten auch (20)

Integrando aplicações com redis
Integrando aplicações com redisIntegrando aplicações com redis
Integrando aplicações com redis
 
Escalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShiftEscalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShift
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra)
 
Escalando Aplicações com Redis
Escalando Aplicações com RedisEscalando Aplicações com Redis
Escalando Aplicações com Redis
 
Algumas das principais características do NoSQL
Algumas das principais características do NoSQLAlgumas das principais características do NoSQL
Algumas das principais características do NoSQL
 
549891
549891549891
549891
 
Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação Django
 
Docker + Django
Docker + DjangoDocker + Django
Docker + Django
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à prática
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Sistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas ComputacionaisSistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas Computacionais
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Sistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e ParalelaSistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e Paralela
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Building Automated REST APIs with Python
Building Automated REST APIs with PythonBuilding Automated REST APIs with Python
Building Automated REST APIs with Python
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafos
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Kürzlich hochgeladen (6)

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Redis – What, Why, When, How?

  • 1. Redis What? Why? When? How? segunda-feira, 27 de agosto de 12
  • 2. About • Software Engineer: Dafiti • Developer: About 10 • php.net, MeeGo, phpsp, fedora project, NoSQL BR, * • Zend Certified Engineer, Husband and Daddy segunda-feira, 27 de agosto de 12
  • 3. Redis • Memcached segunda-feira, 27 de agosto de 12
  • 5. Wha t Dafuck Redis? segunda-feira, 27 de agosto de 12
  • 6. Wha t Dafuck Redis? • Remote Dictionary Server segunda-feira, 27 de agosto de 12
  • 7. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor segunda-feira, 27 de agosto de 12
  • 8. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações segunda-feira, 27 de agosto de 12
  • 9. Wha t Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações • Um servidor de estrutura de dados segunda-feira, 27 de agosto de 12
  • 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ções segunda-feira, 27 de agosto de 12
  • 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 bloqueio segunda-feira, 27 de agosto de 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 rede segunda-feira, 27 de agosto de 12
  • 13. Wha t Um canivete suíço segunda-feira, 27 de agosto de 12
  • 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 armazenamento segunda-feira, 27 de agosto de 12
  • 15. Wha t Breve histórico • Breve mesmo... segunda-feira, 27 de agosto de 12
  • 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. Wha t Agenda! • Como funciona • Tipos de dados • Utilidade • PHP • Úteis segunda-feira, 27 de agosto de 12
  • 18. Wha t Inicio de tudo! $ git clone git://github.com/antirez/redis $ cd redis $ make $ ./redis-server segunda-feira, 27 de agosto de 12
  • 19. t Wha segunda-feira, 27 de agosto de 12
  • 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ém segunda-feira, 27 de agosto de 12
  • 21. Wha t Tipos de dados segunda-feira, 27 de agosto de 12
  • 22. Wha t Tipos de dados • Binary-safe strings ( até 10GB ) • listas • conjuntos • Conjuntos sortidos • (Cada chave possuí uma pontuação) • hashes • Canais pub/sub segunda-feira, 27 de agosto de 12
  • 23. t Wha Os tipos de dados propriamente ditos!!! segunda-feira, 27 de agosto de 12
  • 24. Wha t Strings SET name Kinn SET age 23 MGET name age > Kinn >23 GETSET name Kinncj > Kinn segunda-feira, 27 de agosto de 12
  • 25. Wha t Strings SETEX age 3 20 GET age > 20 // .. 3 segundos após GET age > null segunda-feira, 27 de agosto de 12
  • 26. Wha t Inteiros INCR count >1 INCR count >2 INCRBY count 3 >5 segunda-feira, 27 de agosto de 12
  • 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.net segunda-feira, 27 de agosto de 12
  • 28. Wha t Listas RPUSH admins Kinn >1 RPUSH admins Manolo >2 LINDEX admins 0 > Kinn LLEN admins >2 RPOP admins > Manolo segunda-feira, 27 de agosto de 12
  • 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 >0 segunda-feira, 27 de agosto de 12
  • 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 > 253 segunda-feira, 27 de agosto de 12
  • 31. Wha t Conjuntos sortidos ZADD highscores 2930 Kinn ZADD highscores 1500 Manolo ZREVRANGE highscores 0 10 WITHSCORES > Kinn > 2930 > Manolo > 1500 segunda-feira, 27 de agosto de 12
  • 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. Why Os tipos básicos de cada linguagem existem no redis segunda-feira, 27 de agosto de 12
  • 34. Why Processe dados no redis ao invés do PHP segunda-feira, 27 de agosto de 12
  • 35. Why “SQL” no redis segunda-feira, 27 de agosto de 12
  • 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_* DESC segunda-feira, 27 de agosto de 12
  • 37. Why Pub/Sub segunda-feira, 27 de agosto de 12
  • 38. Why Pub/Sub • Redis faz BroadCast!!!!!! segunda-feira, 27 de agosto de 12
  • 39. Why Pub/Sub SUBSCRIBE mensagem SUBSCRIBE chan1 chan2 chan3 PUBLISH mensagem “Ola Mundo” PSUBSCRIBE chat.* segunda-feira, 27 de agosto de 12
  • 40. Why Goodies segunda-feira, 27 de agosto de 12
  • 41. Why Goodies • Replicação Master/Slave • Transações: MULTI / EXEC / DISCARD segunda-feira, 27 de agosto de 12
  • 42. Why Future Goodies segunda-feira, 27 de agosto de 12
  • 43. Why Future Goodies • Lua Scripting: EVAL segunda-feira, 27 de agosto de 12
  • 44. Why Future Goodies : Cluster segunda-feira, 27 de agosto de 12
  • 45. Why Future Goodies : Cluster • Redis Cluster ( Tão atrasado quanto o PHP 6 ) segunda-feira, 27 de agosto de 12
  • 46. Why Future Goodies : Cluster Velocidade Redis é rápido É muito improvável que CPU seja gargalo segunda-feira, 27 de agosto de 12
  • 47. Why Future Goodies : Cluster Velocidade segunda-feira, 27 de agosto de 12
  • 48. Why Future Goodies : Cluster Redis é rápido segunda-feira, 27 de agosto de 12
  • 49. Why Future Goodies : Cluster É muito improvável que CPU seja gargalo segunda-feira, 27 de agosto de 12
  • 50. Why Future Goodies : Cluster O que você faz quando está sem RAM? segunda-feira, 27 de agosto de 12
  • 51. Why Future Goodies : Cluster Esperar pelo cluster Redis? Se você puder... o Cluster é parece ser ótimo segunda-feira, 27 de agosto de 12
  • 52. Why Goodie! Armazena em memória. Backup em disco. segunda-feira, 27 de agosto de 12
  • 53. Whe n 2 centavos Armazene em disco. Carregue hot-data na memória. segunda-feira, 27 de agosto de 12
  • 54. Whe n Uso • WEB SCALE • THE CLOUD • NOSQL • ELASTIC • HORIZONTAL SCALING • VERTICAL TOO segunda-feira, 27 de agosto de 12
  • 55. Whe n Uso • WEB SCALE • THE CLOUD • NOSQL • ELASTIC • HORIZONTAL SCALING • VERTICAL TOO segunda-feira, 27 de agosto de 12
  • 56. n Whe BULLSHIT segunda-feira, 27 de agosto de 12
  • 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. Whe n Uso Então para que realmente ele é bom? segunda-feira, 27 de agosto de 12
  • 59. Whe n Uso • Armazenamento de sessões • Cache • Qualquer outra coisa que o memcached faça segunda-feira, 27 de agosto de 12
  • 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á fazendo segunda-feira, 27 de agosto de 12
  • 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. 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. Whe n Aplicações • Ajax pooling / Long pooling • Serviço de compartilhamento de diretório ( GitHub) • CSRF tokens • Tokens temporários de OAuth • Cache • Chat segunda-feira, 27 de agosto de 12
  • 64. Whe n Aplicações • Github • Flickr • PHPad ;) segunda-feira, 27 de agosto de 12
  • 65. How E o PHP? Entra aonde? segunda-feira, 27 de agosto de 12
  • 66. How PHP + Redis Extensão phpredis http://github.com/nicolasff/phpredis segunda-feira, 27 de agosto de 12
  • 67. How phpredis • Session handler • up to date segunda-feira, 27 de agosto de 12
  • 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. How PHP + Redis Extensão phpiredis http://github.com/seppo0010/phpiredis segunda-feira, 27 de agosto de 12
  • 70. How phpiredis • Parsing de protocolo • Baixo nível segunda-feira, 27 de agosto de 12
  • 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. How PHP + Redis Extensão Predis http://github.com/nrk/predis segunda-feira, 27 de agosto de 12
  • 73. How Predis • Master/Slave auto select • Pode fazer uso do phpiredis para parsing • Symfony bundle segunda-feira, 27 de agosto de 12
  • 74. How PHP + Redis Doctrine cache layer segunda-feira, 27 de agosto de 12
  • 75. How Doctrine • Cache de query results diretamente no redis. segunda-feira, 27 de agosto de 12
  • 76. How Redis • É rápido! • É divertido! • Try-it try.redis-db.com segunda-feira, 27 de agosto de 12
  • 77. How Obrigado @kinncj kinncj@php.net segunda-feira, 27 de agosto de 12