SlideShare a Scribd company logo
1 of 69
Download to read offline
Remote Dictionary Server




                        Maxwell Dayvson - @dayvson
                       maxwell.silva@corp.terra.com.br
Friday, July 1, 2011
Premissas NoSQL

 • Não podem exigir esquemas de tabela fixa;
 • Não suportam instruções e operações de junção SQL.
 • Pensar fora da caixa.




Friday, July 1, 2011
Quais os tipos de NoSQL?




Friday, July 1, 2011
Quais os tipos de NoSQL?

 Chave/Valor           Colunas
 • Amazon Dynamo       • Cassandra
 • Membase             • BigTable
 • Redis               • HBase
 • Scalaris            • Hyperbase
 • Voldemort

 Documento             Grafo
 • Amazon SimpleDb     • Neo4j
 • Apache Couchdb      • InfoGrid
 • MongoDb             • Sones
 • Riak                • HyperGraphDB


Friday, July 1, 2011
Documento
  São baseados em documentos XML ou JSON,
  podem ser buscados por uma chave única ou por
  qualquer outro valor contido no documento.




Friday, July 1, 2011
Colunas
 Inspirados pelo BigTable do Google.
 Suportam um grande número de colunas e linhas,
 permitindo buscas pelas colunas.




Friday, July 1, 2011
Grafo
   São os mais complexos devido ao fato de que os
   documentos não são armazenados em listas,
   mas em objetos.




Friday, July 1, 2011
Chave/Valor
 O tipo mais simples.
 Armazenam apenas “uma chave e um respectivo valor”.




Friday, July 1, 2011
REDIS

Friday, July 1, 2011
Porque REDIS?




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication
 * Publish/Subscribe




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication
 * Publish/Subscribe
 * Leve e pequeno




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication
 * Publish/Subscribe
 * Leve e pequeno
 * Transactions




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication
 * Publish/Subscribe
 * Leve e pequeno
 * Transactions
 * Similar ao MEMCACHED ( com anabolizantes :D)




Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication
 * Publish/Subscribe
 * Leve e pequeno
 * Transactions
 * Similar ao MEMCACHED ( com anabolizantes :D)
 * Dados persistidos em memória/disco.



Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication
 * Publish/Subscribe
 * Leve e pequeno
 * Transactions
 * Similar ao MEMCACHED ( com anabolizantes :D)
 * Dados persistidos em memória/disco.
 * É OPEN SOURCE - BSD License


Friday, July 1, 2011
Porque REDIS?
 * Incrivelmente rápido
 * I/O não bloqueante
 * 100.000+ leitura/escrita por segundo.
 * As chaves e valores podem expirar (ou não)
 * Master Slave Replication
 * Publish/Subscribe
 * Leve e pequeno
 * Transactions
 * Similar ao MEMCACHED ( com anabolizantes :D)
 * Dados persistidos em memória/disco.
 * É OPEN SOURCE - BSD License
 * VMWare Sponsor

Friday, July 1, 2011
Que tipos de dados eu posso armazenar?




Friday, July 1, 2011
Que tipos de dados eu posso armazenar?


    * Strings




Friday, July 1, 2011
Que tipos de dados eu posso armazenar?


    * Strings
    * Integers




Friday, July 1, 2011
Que tipos de dados eu posso armazenar?


    * Strings
    * Integers
    * Hash




Friday, July 1, 2011
Que tipos de dados eu posso armazenar?


    * Strings
    * Integers
    * Hash
    * Lists




Friday, July 1, 2011
Que tipos de dados eu posso armazenar?


    * Strings
    * Integers
    * Hash
    * Lists
    * Sets




Friday, July 1, 2011
Que tipos de dados eu posso armazenar?


    * Strings
    * Integers
    * Hash
    * Lists
    * Sets
    * Sorted Sets




Friday, July 1, 2011
Manifesto?




Friday, July 1, 2011
Manifesto?
            ..."Nos somos contra complexidade. Acreditamos que
            desenvolver sistemas significa lutar contra complexidade. Nos
            aceitaremos lutar contra a complexidade quando necessário.
            Nos esforçaremos para reconhecer quando uma pequena
            funcionalidade não vale mais que 1000 linhas de código. Na
            maioria das vezes, a melhor forma de lutar contra a
            complexidade e não cria-lá"...




Friday, July 1, 2011
Clients para Redis:




Friday, July 1, 2011
Clients para Redis:


        *C              * Haskell      * PHP
        * C#            * haXe         * Python
        * C++           * Java         * Ruby
        * Clojure       * Lua          * Scala
        * Common Lisp   * Node.JS      * SmallTalk
        * Erlang        * Objetive C   * Tcl
        * Go            * Perl




Friday, July 1, 2011
Quem usa o REDIS?




Friday, July 1, 2011
Quem usa o REDIS?




Friday, July 1, 2011
Como eu posso enviar updates real time
    (live) para 100.000, 500.000, 1.000.000
    usuários conectados?




Friday, July 1, 2011
Para mudanças rápidas
                       podemos usar o REDIS



Friday, July 1, 2011
Friday, July 1, 2011
NO

                       Procuramos a melhor ferramenta para
                       resolver o problema da melhor forma.




Friday, July 1, 2011
Quando eu uso?




Friday, July 1, 2011
Quando eu uso?

 * Cache




Friday, July 1, 2011
Quando eu uso?

 * Cache
 * Stock Prices




Friday, July 1, 2011
Quando eu uso?

 * Cache
 * Stock Prices
 * Sharding Directory Service (github)




Friday, July 1, 2011
Quando eu uso?

 * Cache
 * Stock Prices
 * Sharding Directory Service (github)
 * Real Time data collection




Friday, July 1, 2011
Quando eu uso?

 * Cache
 * Stock Prices
 * Sharding Directory Service (github)
 * Real Time data collection
 * Real Time Communication




Friday, July 1, 2011
Quando eu uso?

 * Cache
 * Stock Prices
 * Sharding Directory Service (github)
 * Real Time data collection
 * Real Time Communication
 * Analytics


Friday, July 1, 2011
Instalando...
 $ wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz
 $ tar xzf redis-2.2.11.tar.gz
 $ cd redis-2.2.11
 $ make




Friday, July 1, 2011
Rodando os testes :)
 $ make test




Friday, July 1, 2011
Start Redis Server
 $ ./redis-server



 Run client redis builtin
 $ ./redis-cli
 redis> set produto terratv
 redis> get produto




Friday, July 1, 2011
Mais algumas opções:
    $ ./redis-cli -h 127.0.0.1 -p 6379
    $ ./redis-cli -n 10
    $ ./redis-cli set person dayvson
    $ ./redis-cli get person




Friday, July 1, 2011
Comandos básicos:
 SET [key value]
 GET [key]
 MGET [key1, key2, key3, key4]
 MSET [key1 value, key2 value, key3 value, key4 value]

 TYPE KEY
 INCR KEY
 DECR KEY

 APPEND KEY VALUE
 SUBSTR KEY 0 1



Friday, July 1, 2011
Comandos com KEYS:

 DEL key
 EXIST key
 EXPIRE key seconds

 KEYS pattern
 MOVE key
 PERSIST key
 TYPE key




Friday, July 1, 2011
Comandos de servidor:

    DBSIZE
    MONITOR
    INFO
    SELECT
    BGSAVE
    SAVE
    FLUSHALL
    FLUSHDB

Friday, July 1, 2011
Persistência




Friday, July 1, 2011
Persistência?


 Por padrão o redis persiste os dados fazendo um dump
 assíncrono com o snapshot atual.

 * A cada X segundos se ao menos Y chaves forem criadas
 * Nome do arquivo é: dump.rdb (pode ser modificado)
 * Compressão usando LZF do dump para as strings

 comando redis:
 save 300 2000




Friday, July 1, 2011
Replication




Friday, July 1, 2011
Replication

 * Simples de configurar e usar
 * Um mestre pode ter vários slaves
 * Um slave aceita conexões de outros slaves
 * Slaves reconectam automagicamente caso o link com o master caia.




 Criando um slave live:
 * slaveof <masterip> <masterport>



Friday, July 1, 2011
publish/subscribe
  Quando precisamos avisar a outros que as coisas mudaram
Friday, July 1, 2011
Pub/Sub
 É um modelo onde você pode registrar listeners
 dentro para um determinado evento e notificar todos
 os listeners envolvidos




Friday, July 1, 2011
Pub/Sub
 É um modelo onde você pode registrar listeners
 dentro para um determinado evento e notificar todos
 os listeners envolvidos
 * PUBLISH




Friday, July 1, 2011
Pub/Sub
 É um modelo onde você pode registrar listeners
 dentro para um determinado evento e notificar todos
 os listeners envolvidos
 * PUBLISH
 É possível enviar mensagens para um canal específico ou utilizando
 regexp




Friday, July 1, 2011
Pub/Sub
 É um modelo onde você pode registrar listeners
 dentro para um determinado evento e notificar todos
 os listeners envolvidos
 * PUBLISH
 É possível enviar mensagens para um canal específico ou utilizando
 regexp

 * SUBSCRIBE




Friday, July 1, 2011
Pub/Sub
 É um modelo onde você pode registrar listeners
 dentro para um determinado evento e notificar todos
 os listeners envolvidos
 * PUBLISH
 É possível enviar mensagens para um canal específico ou utilizando
 regexp

 * SUBSCRIBE
 É necessário ser listener de um canal




Friday, July 1, 2011
Pub/Sub
 É um modelo onde você pode registrar listeners
 dentro para um determinado evento e notificar todos
 os listeners envolvidos
 * PUBLISH
 É possível enviar mensagens para um canal específico ou utilizando
 regexp

 * SUBSCRIBE
 É necessário ser listener de um canal

 * MESSAGE




Friday, July 1, 2011
Pub/Sub
 É um modelo onde você pode registrar listeners
 dentro para um determinado evento e notificar todos
 os listeners envolvidos
 * PUBLISH
 É possível enviar mensagens para um canal específico ou utilizando
 regexp

 * SUBSCRIBE
 É necessário ser listener de um canal

 * MESSAGE
 Mensagem enviada para os listeners



Friday, July 1, 2011
O quanto é rápido?
 Redis possui uma ferramenta de benchmark

 $ ./redis-benchmark -q -n 100000




Friday, July 1, 2011
Redis Monitor
 $ telnet 127.0.0.1 6379
 monitor


 Redis Tools
 https://github.com/antirez/redis-tools


 Teste online
 http://try.redis-db.com/

Friday, July 1, 2011
Cluster no Redis?
 * Na versão 3.0 suporte a cluster oficialmente.




Friday, July 1, 2011
Perguntas?
                             Maxwell Dayvson
                           dayvson@gmail.com
                       maxwell.silva@corp.terra.com.br
                            #twitter @dayvson




Friday, July 1, 2011

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Redis Server Document

  • 1. Remote Dictionary Server Maxwell Dayvson - @dayvson maxwell.silva@corp.terra.com.br Friday, July 1, 2011
  • 2. Premissas NoSQL • Não podem exigir esquemas de tabela fixa; • Não suportam instruções e operações de junção SQL. • Pensar fora da caixa. Friday, July 1, 2011
  • 3. Quais os tipos de NoSQL? Friday, July 1, 2011
  • 4. Quais os tipos de NoSQL? Chave/Valor Colunas • Amazon Dynamo • Cassandra • Membase • BigTable • Redis • HBase • Scalaris • Hyperbase • Voldemort Documento Grafo • Amazon SimpleDb • Neo4j • Apache Couchdb • InfoGrid • MongoDb • Sones • Riak • HyperGraphDB Friday, July 1, 2011
  • 5. Documento São baseados em documentos XML ou JSON, podem ser buscados por uma chave única ou por qualquer outro valor contido no documento. Friday, July 1, 2011
  • 6. Colunas Inspirados pelo BigTable do Google. Suportam um grande número de colunas e linhas, permitindo buscas pelas colunas. Friday, July 1, 2011
  • 7. Grafo São os mais complexos devido ao fato de que os documentos não são armazenados em listas, mas em objetos. Friday, July 1, 2011
  • 8. Chave/Valor O tipo mais simples. Armazenam apenas “uma chave e um respectivo valor”. Friday, July 1, 2011
  • 11. Porque REDIS? * Incrivelmente rápido Friday, July 1, 2011
  • 12. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante Friday, July 1, 2011
  • 13. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. Friday, July 1, 2011
  • 14. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) Friday, July 1, 2011
  • 15. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication Friday, July 1, 2011
  • 16. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe Friday, July 1, 2011
  • 17. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno Friday, July 1, 2011
  • 18. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions Friday, July 1, 2011
  • 19. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D) Friday, July 1, 2011
  • 20. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D) * Dados persistidos em memória/disco. Friday, July 1, 2011
  • 21. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D) * Dados persistidos em memória/disco. * É OPEN SOURCE - BSD License Friday, July 1, 2011
  • 22. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D) * Dados persistidos em memória/disco. * É OPEN SOURCE - BSD License * VMWare Sponsor Friday, July 1, 2011
  • 23. Que tipos de dados eu posso armazenar? Friday, July 1, 2011
  • 24. Que tipos de dados eu posso armazenar? * Strings Friday, July 1, 2011
  • 25. Que tipos de dados eu posso armazenar? * Strings * Integers Friday, July 1, 2011
  • 26. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash Friday, July 1, 2011
  • 27. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * Lists Friday, July 1, 2011
  • 28. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * Lists * Sets Friday, July 1, 2011
  • 29. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * Lists * Sets * Sorted Sets Friday, July 1, 2011
  • 31. Manifesto? ..."Nos somos contra complexidade. Acreditamos que desenvolver sistemas significa lutar contra complexidade. Nos aceitaremos lutar contra a complexidade quando necessário. Nos esforçaremos para reconhecer quando uma pequena funcionalidade não vale mais que 1000 linhas de código. Na maioria das vezes, a melhor forma de lutar contra a complexidade e não cria-lá"... Friday, July 1, 2011
  • 33. Clients para Redis: *C * Haskell * PHP * C# * haXe * Python * C++ * Java * Ruby * Clojure * Lua * Scala * Common Lisp * Node.JS * SmallTalk * Erlang * Objetive C * Tcl * Go * Perl Friday, July 1, 2011
  • 34. Quem usa o REDIS? Friday, July 1, 2011
  • 35. Quem usa o REDIS? Friday, July 1, 2011
  • 36. Como eu posso enviar updates real time (live) para 100.000, 500.000, 1.000.000 usuários conectados? Friday, July 1, 2011
  • 37. Para mudanças rápidas podemos usar o REDIS Friday, July 1, 2011
  • 39. NO Procuramos a melhor ferramenta para resolver o problema da melhor forma. Friday, July 1, 2011
  • 40. Quando eu uso? Friday, July 1, 2011
  • 41. Quando eu uso? * Cache Friday, July 1, 2011
  • 42. Quando eu uso? * Cache * Stock Prices Friday, July 1, 2011
  • 43. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) Friday, July 1, 2011
  • 44. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection Friday, July 1, 2011
  • 45. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time Communication Friday, July 1, 2011
  • 46. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time Communication * Analytics Friday, July 1, 2011
  • 47. Instalando... $ wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz $ tar xzf redis-2.2.11.tar.gz $ cd redis-2.2.11 $ make Friday, July 1, 2011
  • 48. Rodando os testes :) $ make test Friday, July 1, 2011
  • 49. Start Redis Server $ ./redis-server Run client redis builtin $ ./redis-cli redis> set produto terratv redis> get produto Friday, July 1, 2011
  • 50. Mais algumas opções: $ ./redis-cli -h 127.0.0.1 -p 6379 $ ./redis-cli -n 10 $ ./redis-cli set person dayvson $ ./redis-cli get person Friday, July 1, 2011
  • 51. Comandos básicos: SET [key value] GET [key] MGET [key1, key2, key3, key4] MSET [key1 value, key2 value, key3 value, key4 value] TYPE KEY INCR KEY DECR KEY APPEND KEY VALUE SUBSTR KEY 0 1 Friday, July 1, 2011
  • 52. Comandos com KEYS: DEL key EXIST key EXPIRE key seconds KEYS pattern MOVE key PERSIST key TYPE key Friday, July 1, 2011
  • 53. Comandos de servidor: DBSIZE MONITOR INFO SELECT BGSAVE SAVE FLUSHALL FLUSHDB Friday, July 1, 2011
  • 55. Persistência? Por padrão o redis persiste os dados fazendo um dump assíncrono com o snapshot atual. * A cada X segundos se ao menos Y chaves forem criadas * Nome do arquivo é: dump.rdb (pode ser modificado) * Compressão usando LZF do dump para as strings comando redis: save 300 2000 Friday, July 1, 2011
  • 57. Replication * Simples de configurar e usar * Um mestre pode ter vários slaves * Um slave aceita conexões de outros slaves * Slaves reconectam automagicamente caso o link com o master caia. Criando um slave live: * slaveof <masterip> <masterport> Friday, July 1, 2011
  • 58. publish/subscribe Quando precisamos avisar a outros que as coisas mudaram Friday, July 1, 2011
  • 59. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos Friday, July 1, 2011
  • 60. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH Friday, July 1, 2011
  • 61. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp Friday, July 1, 2011
  • 62. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBE Friday, July 1, 2011
  • 63. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBE É necessário ser listener de um canal Friday, July 1, 2011
  • 64. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBE É necessário ser listener de um canal * MESSAGE Friday, July 1, 2011
  • 65. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBE É necessário ser listener de um canal * MESSAGE Mensagem enviada para os listeners Friday, July 1, 2011
  • 66. O quanto é rápido? Redis possui uma ferramenta de benchmark $ ./redis-benchmark -q -n 100000 Friday, July 1, 2011
  • 67. Redis Monitor $ telnet 127.0.0.1 6379 monitor Redis Tools https://github.com/antirez/redis-tools Teste online http://try.redis-db.com/ Friday, July 1, 2011
  • 68. Cluster no Redis? * Na versão 3.0 suporte a cluster oficialmente. Friday, July 1, 2011
  • 69. Perguntas? Maxwell Dayvson dayvson@gmail.com maxwell.silva@corp.terra.com.br #twitter @dayvson Friday, July 1, 2011