Your SlideShare is downloading. ×
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL

2,875
views

Published on

Na palestra do fisl fiz uma introdução aos tipos de banco de dados NOSQL e um e aprofundei no uso e vantagens do Redis na versão 2.2.11.

Na palestra do fisl fiz uma introdução aos tipos de banco de dados NOSQL e um e aprofundei no uso e vantagens do Redis na versão 2.2.11.


0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,875
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
51
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Remote Dictionary Server Maxwell Dayvson - @dayvson maxwell.silva@corp.terra.com.brFriday, 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 • HyperGraphDBFriday, 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
  • 9. REDISFriday, July 1, 2011
  • 10. Porque REDIS?Friday, July 1, 2011
  • 11. Porque REDIS? * Incrivelmente rápidoFriday, July 1, 2011
  • 12. Porque REDIS? * Incrivelmente rápido * I/O não bloqueanteFriday, 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 ReplicationFriday, 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/SubscribeFriday, 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 pequenoFriday, 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 * TransactionsFriday, 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 LicenseFriday, 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 SponsorFriday, July 1, 2011
  • 23. Que tipos de dados eu posso armazenar?Friday, July 1, 2011
  • 24. Que tipos de dados eu posso armazenar? * StringsFriday, July 1, 2011
  • 25. Que tipos de dados eu posso armazenar? * Strings * IntegersFriday, July 1, 2011
  • 26. Que tipos de dados eu posso armazenar? * Strings * Integers * HashFriday, July 1, 2011
  • 27. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * ListsFriday, July 1, 2011
  • 28. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * Lists * SetsFriday, July 1, 2011
  • 29. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * Lists * Sets * Sorted SetsFriday, July 1, 2011
  • 30. Manifesto?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
  • 32. Clients para Redis: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 * PerlFriday, 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 REDISFriday, July 1, 2011
  • 38. 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? * CacheFriday, July 1, 2011
  • 42. Quando eu uso? * Cache * Stock PricesFriday, 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 collectionFriday, July 1, 2011
  • 45. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time CommunicationFriday, July 1, 2011
  • 46. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time Communication * AnalyticsFriday, 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 $ makeFriday, July 1, 2011
  • 48. Rodando os testes :) $ make testFriday, July 1, 2011
  • 49. Start Redis Server $ ./redis-server Run client redis builtin $ ./redis-cli redis> set produto terratv redis> get produtoFriday, 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 personFriday, 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 1Friday, July 1, 2011
  • 52. Comandos com KEYS: DEL key EXIST key EXPIRE key seconds KEYS pattern MOVE key PERSIST key TYPE keyFriday, July 1, 2011
  • 53. Comandos de servidor: DBSIZE MONITOR INFO SELECT BGSAVE SAVE FLUSHALL FLUSHDBFriday, July 1, 2011
  • 54. PersistênciaFriday, 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 2000Friday, July 1, 2011
  • 56. ReplicationFriday, 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 mudaramFriday, July 1, 2011
  • 59. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidosFriday, July 1, 2011
  • 60. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISHFriday, 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 regexpFriday, 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 * SUBSCRIBEFriday, 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 canalFriday, 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 * MESSAGEFriday, 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 listenersFriday, July 1, 2011
  • 66. O quanto é rápido? Redis possui uma ferramenta de benchmark $ ./redis-benchmark -q -n 100000Friday, 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 @dayvsonFriday, July 1, 2011