SlideShare una empresa de Scribd logo
1 de 54
Redis: Uma visão geral

      Junior Ribeiro




        V Pylestras
whoami
                          Desenvolvedor/Líder Técnico em
                          projetos voltados para Gestão de
                          Conteúdo e Portais

Bacharel em Sistemas de Informação – FIC

Twitter: fjunior87
Linkedin: br.linkedin.com/in/fribeiro
Blog: http://xicojunior.wordpress.com
Email: fjunior87@gmail.com
Redis
•   Criado por Salvatore Sanfilippo(@antirez)
•   Primeira Release em março de 2009
•   Patrocinado pela VM Ware
•   Atualmente na versão 2.4.17
Redis
• REmote DIctionary Server
• Key-Value Store - Dicionário(hash) Remoto
• Suporta outras estruturas de dados
  – List, set, hash, ordered set
• DataStructure Server
• Publish/Subscribe
• Expires
Redis
  • Em memória... Muito, muito rápido!!!!
         – Mas persiste os dados em disco – Snapshoting
         – Requer bastante RAM dependendo da quantidade
           de dados
  • Non-Blocking I/O
  • Single-Threaded
  • 100.000+ operações de leitura e
    escrita/segundo[1]
[1]http://simonwillison.net/static/2010/redis-tutorial/
Redis
Redis
• Por onde iniciar?
  – http://try.redis-db.com/
• Instalação
  – Download e unzip
  – Iniciar o server: ./redis-server ou redis-
    server.exe(WIN)
  – Iniciar o client: ./redis-cli ou redis-cli.exe(Win)
• Muito simples!!!
Chaves e Valores
• Chaves são utilizadas para identificar dados no
  Redis(String)
  – Ex: server:name, user:1
• Valores estão associados com as chaves
  – String, Integer, Estrutura de Dado
  – JSON, XML, whatever...
  – Strings são byte arrays
Chaves e Valores
• Associando valores a chaves


set server:name myhostname

set user:1
  „{“nome”:”junior”,”username”:”fjunior87”}‟
Chaves e Valores
• Obtendo o valor de uma chave

get server:name

get user:1
Comandos
•   GET               •   TYPE
•   SET               •   EXISTS
•   SETNX             •   DEL
•   GETSET            •   EXPIRE
•   MGET
                      •   EXPIREAT
•   MSET
                      •   TTL
•   INCR/INCRBY
•   DECR/DECRBY
Comandos
setnx foo bar //OK!
setnx foo bar2 //NoK!


//setar varias chaves
mset   dia 06 mes 10 ano 2012


//obter varias chaves
mget dia mes ano
Comandos
//setar novo valor e obter o antigo
set var valor
getset var novovalor //retorna
  „valor‟


//Contador
incr user:ids
decr user:1:convites
Comandos
//checando o tipo da chave
type ano


//deletando uma chave
del   ano


//checando existencia de um chave
exists   blah
Caching
• Redis como um Cache store
  – EXPIRE, EXPIREAT, TTL

SET last_page <html></html>
EXPIRE last_page 60
TTL last_page
Caching
• SETEX

 setex   last_page 60 <html></html>
 ttl last_page
Listas

•   LPUSH/RPUSH
•   LLEN
•   LPOP/RPOP
•   LRANGE
•   LINDEX
•   LTRIM
Listas
//adicionando elementos ao inicio
lpush linguagem python

//adicionando ao final
rpush linguagem java
rpush linguagem ruby

//obtendo todos os elementos
lrange linguagem 0 -1
Lista
//removendo do inicio
lpop linguagem


//removendo do fim
rpop linguagem


//trim
ltrim linguagem 0 1
Lista
//Uma fila simples - FIFO
lpush fila primeiro
lpush fila segundo
lpush fila terceiro

rpop fila //primeiro
rpop fila //segundo
Set
• Conjunto de Strings
• Não ordenados
• Sem duplicatas
Set
•   sadd
•   smembers
•   Scard
•   Spop
•   srandmember
•   sismember
•   srem
Set
//adicionando amigos
sadd friends:junior fabio
sadd friends:junior manolo   doe

spop friends:junior
srandmember friends:junior

//checando se amigo
sismemeber friends:junior fabio
Set
//removendo amigo
srem friends:junior manolo

//checando qtde de amigos
Scard friends:manolo
SET
• SUNION/SUNIONSTORE
• SDIFF/SDIFFSTORE
• SINTER/SINTERSTORE

• Podem ser aplicadas mais de 2 chaves nas
  operações
Set
//Amigos em comum
sinter friends:junior      friends:manolo


//armazenar o resultado em outra chave
sinterstore chave_destino friends:junior
  friends:manolo
Set
//amigos do manolo que não são amigos do jr
SDIFF friends:manolo       friends:junior


//todos os amigos do manolo e junior
SUNION friends:manolo       friends:junior
Sorted Set
•   zset
•   Similar ao SET
•   Cada elemento possui um score
•   Podemos consultar pelo score ou intervalo de
    scores em qualquer direção (bottom/top)
Sorted Set
•   ZADD
•   ZREM
•   ZCARD
•   ZSCORE
•   ZINCRBY
•   ZRANK
•   ZREVRANK
Sorted Set
zadd   urna:1   0   tiririca
zadd   urna:1   0   maluf


//numero de votos do candidato
zscore urna:1 maluf


//votando num candidato
zincrby   urna:1    1 tiririca
Sorted Set

• ZRANGE
• ZREVRANGE
• ZRANGEBYSCORE

• [WITHSCORES]
Sorted Set
//obter os 3 menos votados
ZRANGE urna:1     0   2


//obter os 3 menos votados com score
ZRANGE urna:1     0   2 WITHSCORES


//obter os 3 mais votados
ZREVRANGE urna:1      0 2 WITHSCORES
Sorted Set
//candidatos com numero de votos entre 20 e
  50
zrangebyscore   urna:1   20 50
zrangebyscore   urna:1   20 50   WITHSCORES
Sorted Sets
• zunionstore
• zinterstore

• Aggregate sum|max|min
Sorted Set
//total de votos dos candidatos
zunionstore   urnatotal 2 urna:1 urna:2
zrevrange urnatotal 0 -1 withscores
Hash
• Como o nome já diz
• Fields
• Ideal para armazenar objetos
  – Mais flexibilidade do que objetos serializados
  – Podendo obter/atualizar valores de campos
    específicos
Hash
•   HSET/HGET
•   HMSET
•   HKEYS
•   HGETALL
•   HINCRBY
•   HDEL
Hash
//Armazenando um usuario
hset user:1      nome junior
hset user:1      username fjunior87


//setando varios fields
hmset   user:1   password 1234   idade   25
Hashes
//obtendo o nome
hget user:1       nome


//obtendo mais de um campo
hmget user:1       idade password


//obtendo todos
hgetall   user:1
Pipeline
• A cada comando o cliente aguarda a resposta
    sadd users junior
    sadd users manolo
    smembers users
• Acima temos 3 trips
• RTT – Round Trip Time
• Redis suporta pipelining
• Vários comandos enviados sem esperar por suas
  respostas – batch de comandos
• Minimiza overhead de rede
Pipeline
• Exemplo usando a biblioteca redis-py

r=redis.Redis()
pipe=r.pipe ()
for i in range(10000):
  pipe.ping()
pipe.execute()
Transaction
• Permitem a execução de um grupo de
  comandos de forma atômica
• 2 garantias
  – Comandos executados sequencialmente sem
    interferência
  – Tudo ou nada – Ou todos são executados ou
    nenhum
Transaction
• MULTI
• EXEC
Transaction
r = redis.Redis()
pipe = r.pipeline(transaction=True)
next_id = pipe.incr("user:ids")
pipe.hset("user:%s"%next_id,"nome","junior")
pipe.execute()
Publish/Subscribe
• Redis suporta publish/subscribe
publish
subscribe
psubscribe
unsubscribe
punsubscribe
Publish/Subscribe
//em uma janela redis-cli
subscribe     warnings


//em outra janela
publish warnings       “o sistema miou!”
Publish/Subscribe
//subscribe com padrão
psubscribe warnings:*


//subscribe multiplos channels
subscribe    channel1 channel2 ...
Casos de Uso
• Contador
  – Quando bloquear um IP
  – Page Views

  – Podemos utilizar o comando INCR
  incr   acess:127.0.0.1:06-10-2012

  url = md5(url)
  incr views:url:06-10-2012
  Incr views:06-10-2012
Casos de Uso
• Sessões Web
  – Redis para armazenar os dados de sessão

  hset session:as242dsd user fjunior87
    displayname junior
  Expire session:as242dsd 1800


  – django-redis-sessions
Casos de Uso
• Caching
  – Podendo ser usado da mesma forma que o
    memcache

  – django-redis-cache
Casos de Uso
• Message Queue
  – LPUSH – RPOP
  – BRPOP – BLPOP

  – Resque - ruby
  – RestMQ – Pytho n(Twisted, Cyclone)
Referências
• http://simonwillison.net/static/2010/redis-
  tutorial/
• http://highscalability.com/blog/2011/7/6/11-
  common-web-use-cases-solved-in-redis.html
• http://www.paperplanes.de/2010/2/16/a_coll
  ection_of_redis_use_cases.html
• http://rediscookbook.org/
???
???
Obrigado!!

Más contenido relacionado

La actualidad más candente

Trabalho so m4 rui faria
Trabalho so m4   rui fariaTrabalho so m4   rui faria
Trabalho so m4 rui fariaRuiFaria38
 
Introdução aos comandos Linux
Introdução aos comandos LinuxIntrodução aos comandos Linux
Introdução aos comandos LinuxCarlos Quadros
 
Vim - Um editor onipresente e flexível
Vim - Um editor onipresente e flexívelVim - Um editor onipresente e flexível
Vim - Um editor onipresente e flexívelGilson Filho
 
Linux comandos gerais e servidores de rede
Linux   comandos gerais e servidores de redeLinux   comandos gerais e servidores de rede
Linux comandos gerais e servidores de redefernandao777
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)Sérgio Silva
 
Aula - Administração de usuários
Aula - Administração de usuáriosAula - Administração de usuários
Aula - Administração de usuáriosLeo Amorim
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1Leo Amorim
 
Certificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosCertificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosLeandro Rezende
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 

La actualidad más candente (18)

Terminal off python
Terminal off pythonTerminal off python
Terminal off python
 
Trabalho so m4 rui faria
Trabalho so m4   rui fariaTrabalho so m4   rui faria
Trabalho so m4 rui faria
 
Linux shell
Linux shellLinux shell
Linux shell
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
Shell Scipt - Comandos
Shell Scipt - ComandosShell Scipt - Comandos
Shell Scipt - Comandos
 
Introdução aos comandos Linux
Introdução aos comandos LinuxIntrodução aos comandos Linux
Introdução aos comandos Linux
 
Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida) Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida)
 
Vim - Um editor onipresente e flexível
Vim - Um editor onipresente e flexívelVim - Um editor onipresente e flexível
Vim - Um editor onipresente e flexível
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Linux comandos gerais e servidores de rede
Linux   comandos gerais e servidores de redeLinux   comandos gerais e servidores de rede
Linux comandos gerais e servidores de rede
 
Apache proxy
Apache proxyApache proxy
Apache proxy
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)
 
Tr.01.comandos part1
Tr.01.comandos part1Tr.01.comandos part1
Tr.01.comandos part1
 
Aula - Administração de usuários
Aula - Administração de usuáriosAula - Administração de usuários
Aula - Administração de usuários
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Certificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosCertificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 Exercícios
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 

Destacado

Tecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisTecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisLuiz Bettega
 
Tecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisTecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisCesar Schneider
 
Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Miguel Galves
 
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQLFISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQLMaxwell Dayvson Da Silva
 
Redis – What, Why, When, How?
Redis – What, Why, When, How?Redis – What, Why, When, How?
Redis – What, Why, When, How?Kinn Julião
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBPaulo Bischof
 

Destacado (8)

Tecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisTecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveis
 
Tecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisTecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveis
 
NoSql Introduction
NoSql IntroductionNoSql Introduction
NoSql Introduction
 
Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014
 
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQLFISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
 
PHP e Redis
PHP e RedisPHP e Redis
PHP e Redis
 
Redis – What, Why, When, How?
Redis – What, Why, When, How?Redis – What, Why, When, How?
Redis – What, Why, When, How?
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDB
 

Similar a Redis

Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosAlexandre Almeida
 
HTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frenteHTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frenteLuiz Oliveira
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFBianca Caruso da Paixão
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...Sandro Suffert
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Seguranca em Servidores Linux
Seguranca em Servidores LinuxSeguranca em Servidores Linux
Seguranca em Servidores LinuxAlessandro Silva
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7iMasters
 
MySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL Brasil
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dadostdc-globalcode
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time Umbler
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptMarcos Artigas
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkLeandro Domingues
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores LinuxImpacta Eventos
 

Similar a Redis (20)

Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutos
 
Minicurso Ruby on Rails
Minicurso Ruby on RailsMinicurso Ruby on Rails
Minicurso Ruby on Rails
 
HTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frenteHTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frente
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFF
 
Php
PhpPhp
Php
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Seguranca em Servidores Linux
Seguranca em Servidores LinuxSeguranca em Servidores Linux
Seguranca em Servidores Linux
 
PHP 7
PHP 7PHP 7
PHP 7
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
MySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI Tecnologia
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dados
 
Aula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLiteAula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLite
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.ppt
 
Segurança Linux
Segurança LinuxSegurança Linux
Segurança Linux
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores Linux
 

Redis

  • 1. Redis: Uma visão geral Junior Ribeiro V Pylestras
  • 2. whoami Desenvolvedor/Líder Técnico em projetos voltados para Gestão de Conteúdo e Portais Bacharel em Sistemas de Informação – FIC Twitter: fjunior87 Linkedin: br.linkedin.com/in/fribeiro Blog: http://xicojunior.wordpress.com Email: fjunior87@gmail.com
  • 3. Redis • Criado por Salvatore Sanfilippo(@antirez) • Primeira Release em março de 2009 • Patrocinado pela VM Ware • Atualmente na versão 2.4.17
  • 4. Redis • REmote DIctionary Server • Key-Value Store - Dicionário(hash) Remoto • Suporta outras estruturas de dados – List, set, hash, ordered set • DataStructure Server • Publish/Subscribe • Expires
  • 5. Redis • Em memória... Muito, muito rápido!!!! – Mas persiste os dados em disco – Snapshoting – Requer bastante RAM dependendo da quantidade de dados • Non-Blocking I/O • Single-Threaded • 100.000+ operações de leitura e escrita/segundo[1] [1]http://simonwillison.net/static/2010/redis-tutorial/
  • 7. Redis • Por onde iniciar? – http://try.redis-db.com/ • Instalação – Download e unzip – Iniciar o server: ./redis-server ou redis- server.exe(WIN) – Iniciar o client: ./redis-cli ou redis-cli.exe(Win) • Muito simples!!!
  • 8. Chaves e Valores • Chaves são utilizadas para identificar dados no Redis(String) – Ex: server:name, user:1 • Valores estão associados com as chaves – String, Integer, Estrutura de Dado – JSON, XML, whatever... – Strings são byte arrays
  • 9. Chaves e Valores • Associando valores a chaves set server:name myhostname set user:1 „{“nome”:”junior”,”username”:”fjunior87”}‟
  • 10. Chaves e Valores • Obtendo o valor de uma chave get server:name get user:1
  • 11. Comandos • GET • TYPE • SET • EXISTS • SETNX • DEL • GETSET • EXPIRE • MGET • EXPIREAT • MSET • TTL • INCR/INCRBY • DECR/DECRBY
  • 12. Comandos setnx foo bar //OK! setnx foo bar2 //NoK! //setar varias chaves mset dia 06 mes 10 ano 2012 //obter varias chaves mget dia mes ano
  • 13. Comandos //setar novo valor e obter o antigo set var valor getset var novovalor //retorna „valor‟ //Contador incr user:ids decr user:1:convites
  • 14. Comandos //checando o tipo da chave type ano //deletando uma chave del ano //checando existencia de um chave exists blah
  • 15. Caching • Redis como um Cache store – EXPIRE, EXPIREAT, TTL SET last_page <html></html> EXPIRE last_page 60 TTL last_page
  • 16. Caching • SETEX setex last_page 60 <html></html> ttl last_page
  • 17. Listas • LPUSH/RPUSH • LLEN • LPOP/RPOP • LRANGE • LINDEX • LTRIM
  • 18. Listas //adicionando elementos ao inicio lpush linguagem python //adicionando ao final rpush linguagem java rpush linguagem ruby //obtendo todos os elementos lrange linguagem 0 -1
  • 19. Lista //removendo do inicio lpop linguagem //removendo do fim rpop linguagem //trim ltrim linguagem 0 1
  • 20. Lista //Uma fila simples - FIFO lpush fila primeiro lpush fila segundo lpush fila terceiro rpop fila //primeiro rpop fila //segundo
  • 21. Set • Conjunto de Strings • Não ordenados • Sem duplicatas
  • 22. Set • sadd • smembers • Scard • Spop • srandmember • sismember • srem
  • 23. Set //adicionando amigos sadd friends:junior fabio sadd friends:junior manolo doe spop friends:junior srandmember friends:junior //checando se amigo sismemeber friends:junior fabio
  • 24. Set //removendo amigo srem friends:junior manolo //checando qtde de amigos Scard friends:manolo
  • 25. SET • SUNION/SUNIONSTORE • SDIFF/SDIFFSTORE • SINTER/SINTERSTORE • Podem ser aplicadas mais de 2 chaves nas operações
  • 26. Set //Amigos em comum sinter friends:junior friends:manolo //armazenar o resultado em outra chave sinterstore chave_destino friends:junior friends:manolo
  • 27. Set //amigos do manolo que não são amigos do jr SDIFF friends:manolo friends:junior //todos os amigos do manolo e junior SUNION friends:manolo friends:junior
  • 28. Sorted Set • zset • Similar ao SET • Cada elemento possui um score • Podemos consultar pelo score ou intervalo de scores em qualquer direção (bottom/top)
  • 29. Sorted Set • ZADD • ZREM • ZCARD • ZSCORE • ZINCRBY • ZRANK • ZREVRANK
  • 30. Sorted Set zadd urna:1 0 tiririca zadd urna:1 0 maluf //numero de votos do candidato zscore urna:1 maluf //votando num candidato zincrby urna:1 1 tiririca
  • 31. Sorted Set • ZRANGE • ZREVRANGE • ZRANGEBYSCORE • [WITHSCORES]
  • 32. Sorted Set //obter os 3 menos votados ZRANGE urna:1 0 2 //obter os 3 menos votados com score ZRANGE urna:1 0 2 WITHSCORES //obter os 3 mais votados ZREVRANGE urna:1 0 2 WITHSCORES
  • 33. Sorted Set //candidatos com numero de votos entre 20 e 50 zrangebyscore urna:1 20 50 zrangebyscore urna:1 20 50 WITHSCORES
  • 34. Sorted Sets • zunionstore • zinterstore • Aggregate sum|max|min
  • 35. Sorted Set //total de votos dos candidatos zunionstore urnatotal 2 urna:1 urna:2 zrevrange urnatotal 0 -1 withscores
  • 36. Hash • Como o nome já diz • Fields • Ideal para armazenar objetos – Mais flexibilidade do que objetos serializados – Podendo obter/atualizar valores de campos específicos
  • 37. Hash • HSET/HGET • HMSET • HKEYS • HGETALL • HINCRBY • HDEL
  • 38. Hash //Armazenando um usuario hset user:1 nome junior hset user:1 username fjunior87 //setando varios fields hmset user:1 password 1234 idade 25
  • 39. Hashes //obtendo o nome hget user:1 nome //obtendo mais de um campo hmget user:1 idade password //obtendo todos hgetall user:1
  • 40. Pipeline • A cada comando o cliente aguarda a resposta sadd users junior sadd users manolo smembers users • Acima temos 3 trips • RTT – Round Trip Time • Redis suporta pipelining • Vários comandos enviados sem esperar por suas respostas – batch de comandos • Minimiza overhead de rede
  • 41. Pipeline • Exemplo usando a biblioteca redis-py r=redis.Redis() pipe=r.pipe () for i in range(10000): pipe.ping() pipe.execute()
  • 42. Transaction • Permitem a execução de um grupo de comandos de forma atômica • 2 garantias – Comandos executados sequencialmente sem interferência – Tudo ou nada – Ou todos são executados ou nenhum
  • 44. Transaction r = redis.Redis() pipe = r.pipeline(transaction=True) next_id = pipe.incr("user:ids") pipe.hset("user:%s"%next_id,"nome","junior") pipe.execute()
  • 45. Publish/Subscribe • Redis suporta publish/subscribe publish subscribe psubscribe unsubscribe punsubscribe
  • 46. Publish/Subscribe //em uma janela redis-cli subscribe warnings //em outra janela publish warnings “o sistema miou!”
  • 47. Publish/Subscribe //subscribe com padrão psubscribe warnings:* //subscribe multiplos channels subscribe channel1 channel2 ...
  • 48. Casos de Uso • Contador – Quando bloquear um IP – Page Views – Podemos utilizar o comando INCR incr acess:127.0.0.1:06-10-2012 url = md5(url) incr views:url:06-10-2012 Incr views:06-10-2012
  • 49. Casos de Uso • Sessões Web – Redis para armazenar os dados de sessão hset session:as242dsd user fjunior87 displayname junior Expire session:as242dsd 1800 – django-redis-sessions
  • 50. Casos de Uso • Caching – Podendo ser usado da mesma forma que o memcache – django-redis-cache
  • 51. Casos de Uso • Message Queue – LPUSH – RPOP – BRPOP – BLPOP – Resque - ruby – RestMQ – Pytho n(Twisted, Cyclone)
  • 52. Referências • http://simonwillison.net/static/2010/redis- tutorial/ • http://highscalability.com/blog/2011/7/6/11- common-web-use-cases-solved-in-redis.html • http://www.paperplanes.de/2010/2/16/a_coll ection_of_redis_use_cases.html • http://rediscookbook.org/