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
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
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
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
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
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