SlideShare uma empresa Scribd logo
1 de 81
Redis
A Key-Value datastore
About

• Software Engineer: Dafiti
• Developer: About 10
• php.net, MeeGo, phpsp, fedora project,
  NoSQL BR, *
• Zend Certified Engineer, Husband and
  Daddy
Dafuck Redis?
Dafuck Redis?
• Remote Dictionary Server
Dafuck Redis?
• Remote Dictionary Server
• Armazenamento chave-valor
Dafuck Redis?
• Remote Dictionary Server
• Armazenamento chave-valor
  • ... lista e executa operações
Dafuck Redis?
• Remote Dictionary Server
• Armazenamento chave-valor
  • ... lista e executa operações
• Um servidor de estrutura de dados
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
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
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
Um canivete suíço
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
Breve histórico



• Breve mesmo...
Breve histórico

• Criado por Salvatore Sanfilippo
  ( antirez )
• Primeiro release: Março/2009
• “Adquirido” pela VMWare em Março
  de 2010

• Open Source ( BSD )
Agenda
Agenda?
é... agora que ta
começando a parada!
Agenda!
• Como funciona
• Comandos
• Tipos de dados
• Utilidade
• PHP
• Úteis
Inicio de tudo!
$ git clone git://github.com/antirez/redis

$ cd redis

$ make

$ ./redis-server
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
Tipos de dados
Tipos de dados
• Binary-safe strings ( até 10GB )
  • listas
  • conjuntos
• Conjuntos sortidos
  • (Cada chave possuí uma pontuação)
• hashes
• Canais pub/sub
Comandos da base de
          dados
•   SELECT
•   MOVE
•   FLUSHDB

•   FLUSHALL
•   SHUTDOWN
•   SLAVEOF

•   DBSIZE
•   INFO
•   MONITOR

•   SAVE / BGSAVE
•   LASTSAVE
•   BGREWRITEAOF
Comandos da base de
          dados
•   SELECT
•   MOVE
•   FLUSHDB          16 bases
•   FLUSHALL        numeradas
•   SHUTDOWN
•   SLAVEOF

•   DBSIZE
•   INFO
•   MONITOR

•   SAVE / BGSAVE
•   LASTSAVE
•   BGREWRITEAOF
Comandos da base de
          dados
•   SELECT
•   MOVE
•   FLUSHDB         Exclusão em
•   FLUSHALL          massa
•   SHUTDOWN
•   SLAVEOF

•   DBSIZE
•   INFO
•   MONITOR

•   SAVE / BGSAVE
•   LASTSAVE
•   BGREWRITEAOF
Comandos da base de
          dados
•   SELECT
•   MOVE
•   FLUSHDB           Útil para
•   FLUSHALL         debugging e
•   SHUTDOWN        monitoramento
•   SLAVEOF

•   DBSIZE
•   INFO
•   MONITOR

•   SAVE / BGSAVE
•   LASTSAVE
•   BGREWRITEAOF
Comandos
• SET [chave valor]
• SETEX [chave tempo valor]
• GET [chave]
• MGET [chave1 chave2 ...]
• MSET [chave1 valor1 chave2 valor2 ...]
• INCR / INCRBY
• DECR / DECRBY
• APPEND [chave valor]
• SUBSTR [chave 0 1]
Comandos atomicos

• GETSET [chave valor]
  • Seta o novo valor e retorna o anterior
• SETNX [chave valor]
  • Falha se a chave já está setada
• MSETNX [ c1 v1 c2 v2 c3 v3 ... ]
  • Falha se ALGUMA chave já existir
Os tipos de dados!!!
Strings

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


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


INCR count
>1
INCR count
>2
INCRBY count 3
>5
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
Listas

RPUSH admins Kinn
>1
RPUSH admins Manolo
>2
LINDEX admins 0
> Kinn
LLEN admins
>2
RPOP admins
> Manolo
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
Conjuntos


SADD page:6:visitors 253
SADD page:6:visitors 923
SADD page:6:visitors 13
SINTER page:3:visitors page:6:visitors
> 253
Conjuntos sortidos


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


Listas
  array(‘foo’, ‘bar’);

Conjuntos
  suffle(array(‘foo’, ‘bar’));

Conjuntos sortidos
  ksort(array(3 => ‘foo’, 1 => ‘bar’));
Os tipos básicos de cada
linguagem existem no redis
Processe dados no redis ao
      invés do PHP
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
Pub/Sub
Pub/Sub



• Redis faz BroadCast!!!!!!
Pub/Sub



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



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



• Lua Scripting: EVAL
Future Goodies : Cluster
Future Goodies : Cluster



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

             Velocidade
            Redis é rápido
É muito improvável que CPU seja gargalo
Future Goodies : Cluster


        Velocidade
Future Goodies : Cluster


       Redis é rápido
Future Goodies : Cluster


É muito improvável que CPU seja gargalo
Future Goodies : Cluster


O que você faz quando está sem RAM?
Future Goodies : Cluster

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


     Armazene em disco.
Carregue hot-data na memória.
Uso
• WEB SCALE
• THE CLOUD
• NOSQL
• ELASTIC
• HORIZONTAL SCALING
• VERTICAL TOO
Uso
• WEB SCALE
• THE CLOUD
• NOSQL
• ELASTIC
• HORIZONTAL SCALING
• VERTICAL TOO
BULLSHIT
Caia na real


Se você precisa escalar, sua base de dados
não vai magicamente fazer isso por você
Uso


Então para que realmente ele é bom?
Uso


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

• Cache: Site de noticias
  • Leituras caras
  • Mudança rápida de páginas
  • Tracking dinâmico do que o usuário
    está fazendo
Uso
• Cache: Site de noticias

Cacheando resultados genéricos:
  SETEX <id da página>:content 600 <dados>
Uso

• Lista de jobs
 BRPOP fila
 LPUSH fila “descrição do job”


 ex: Lib resque do GitHub https://github.com/defunkt/resque/
Aplicações
• Ajax pooling
• Serviço de compartilhamento de
  diretório ( GitHub)

• CSRF tokens
• Tokens temporários de OAuth
• Cache
• Chat
E o PHP?


Entra aonde?
PHP + Redis


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



• Session handler
• up to date
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’);
PHP + Redis


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



• Parsing de protocolo
• Baixo nível
phpredis

$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’);
PHP + Redis


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


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

• Symfony bundle
PHP + Redis


Doctrine cache layer
Doctrine



• Cache de query results diretamente
  no redis.
Redis


• É rápido!
• É divertido!
• Try-it try.redis-db.com
Obrigado
                                     @kinncj
                                  kinncj@php.net
•   http://rediscookbook.org/pubsub_for_synchronous_communication.html - The chat application


•   http://redis.io/topics/twitter-clone/ - A micro-blogging application


•   http://docs.doctrine-project.org/en/latest/reference/caching.html - Doctrine cache


•   http://highscalability.com/blog/2011/7/6/11-common-web-use-cases-solved-in-redis.html - Use cases


•   http://redis.io/


•   https://github.com/kinncj/Redis---PHPMSCONF2012

Mais conteúdo relacionado

Mais procurados

Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010lucashungaro
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Yet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentroYet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentroCarlos Brando
 
Identifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusIdentifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusLeonn Leite
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaCésar Araújo
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoNando Vieira
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1Daniel Lopes
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 

Mais procurados (20)

Redis
RedisRedis
Redis
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
A busca pelo deploy continuo
A busca pelo deploy continuoA busca pelo deploy continuo
A busca pelo deploy continuo
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Yet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentroYet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentro
 
Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
Identifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusIdentifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopus
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibana
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo preto
 
Php
PhpPhp
Php
 
Implementação de
Implementação de Implementação de
Implementação de
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 

Destaque

Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Miguel Galves
 
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
 
Redis And python at pycon_2011
Redis And python at pycon_2011Redis And python at pycon_2011
Redis And python at pycon_2011sunilar0ra
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Otávio Santana
 
Redis – What, Why, When, How?
Redis – What, Why, When, How?Redis – What, Why, When, How?
Redis – What, Why, When, How?Kinn Julião
 
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
 
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
 
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 cluster
Redis clusterRedis cluster
Redis clusteriammutex
 
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
 

Destaque (20)

NoSQL
NoSQLNoSQL
NoSQL
 
Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014
 
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
 
Redis And python at pycon_2011
Redis And python at pycon_2011Redis And python at pycon_2011
Redis And python at pycon_2011
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra)
 
Redis – What, Why, When, How?
Redis – What, Why, When, How?Redis – What, Why, When, How?
Redis – What, Why, When, How?
 
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
 
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
 
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
 
Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
 
Big Data e NoSQL
Big Data e NoSQLBig Data e NoSQL
Big Data e NoSQL
 
Redis cluster
Redis clusterRedis cluster
Redis cluster
 
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
 

Semelhante a Redis um banco chave valor

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
 
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
 
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
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchLuiz Henrique Zambom Santana
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
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
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOLAllisson Azevedo
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Rodolfo Fadino Junior
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISMario Guedes
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISArrayOf.io
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceJosé Roberto Araújo
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
OpenShift: NoSQL  "a la carte"  num PaaS 100% Open SourceOpenShift: NoSQL  "a la carte"  num PaaS 100% Open Source
OpenShift: NoSQL "a la carte" num PaaS 100% Open SourceEdgar Silva
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 

Semelhante a Redis um banco chave valor (20)

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
 
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
 
PHP e Redis
PHP e RedisPHP e Redis
PHP e Redis
 
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
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
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
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para Linux
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016
 
LDAP
LDAPLDAP
LDAP
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDIS
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDIS
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performance
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
OpenShift: NoSQL  "a la carte"  num PaaS 100% Open SourceOpenShift: NoSQL  "a la carte"  num PaaS 100% Open Source
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 

Redis um banco chave valor

  • 2. About • Software Engineer: Dafiti • Developer: About 10 • php.net, MeeGo, phpsp, fedora project, NoSQL BR, * • Zend Certified Engineer, Husband and Daddy
  • 4. Dafuck Redis? • Remote Dictionary Server
  • 5. Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor
  • 6. Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações
  • 7. Dafuck Redis? • Remote Dictionary Server • Armazenamento chave-valor • ... lista e executa operações • Um servidor de estrutura de dados
  • 8. 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
  • 9. 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
  • 10. 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
  • 12. 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
  • 14. Breve histórico • Criado por Salvatore Sanfilippo ( antirez ) • Primeiro release: Março/2009 • “Adquirido” pela VMWare em Março de 2010 • Open Source ( BSD )
  • 17. é... agora que ta começando a parada!
  • 18. Agenda! • Como funciona • Comandos • Tipos de dados • Utilidade • PHP • Úteis
  • 19. Inicio de tudo! $ git clone git://github.com/antirez/redis $ cd redis $ make $ ./redis-server
  • 20.
  • 21. 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
  • 23. Tipos de dados • Binary-safe strings ( até 10GB ) • listas • conjuntos • Conjuntos sortidos • (Cada chave possuí uma pontuação) • hashes • Canais pub/sub
  • 24. Comandos da base de dados • SELECT • MOVE • FLUSHDB • FLUSHALL • SHUTDOWN • SLAVEOF • DBSIZE • INFO • MONITOR • SAVE / BGSAVE • LASTSAVE • BGREWRITEAOF
  • 25. Comandos da base de dados • SELECT • MOVE • FLUSHDB 16 bases • FLUSHALL numeradas • SHUTDOWN • SLAVEOF • DBSIZE • INFO • MONITOR • SAVE / BGSAVE • LASTSAVE • BGREWRITEAOF
  • 26. Comandos da base de dados • SELECT • MOVE • FLUSHDB Exclusão em • FLUSHALL massa • SHUTDOWN • SLAVEOF • DBSIZE • INFO • MONITOR • SAVE / BGSAVE • LASTSAVE • BGREWRITEAOF
  • 27. Comandos da base de dados • SELECT • MOVE • FLUSHDB Útil para • FLUSHALL debugging e • SHUTDOWN monitoramento • SLAVEOF • DBSIZE • INFO • MONITOR • SAVE / BGSAVE • LASTSAVE • BGREWRITEAOF
  • 28. Comandos • SET [chave valor] • SETEX [chave tempo valor] • GET [chave] • MGET [chave1 chave2 ...] • MSET [chave1 valor1 chave2 valor2 ...] • INCR / INCRBY • DECR / DECRBY • APPEND [chave valor] • SUBSTR [chave 0 1]
  • 29. Comandos atomicos • GETSET [chave valor] • Seta o novo valor e retorna o anterior • SETNX [chave valor] • Falha se a chave já está setada • MSETNX [ c1 v1 c2 v2 c3 v3 ... ] • Falha se ALGUMA chave já existir
  • 30. Os tipos de dados!!!
  • 31. Strings SET name Kinn SET age 23 MGET name age > Kinn >23 GETSET name Kinncj > Kinn
  • 32. Strings SETEX age 3 20 GET age > 20 // .. 3 segundos após GET age > null
  • 34. 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
  • 35. Listas RPUSH admins Kinn >1 RPUSH admins Manolo >2 LINDEX admins 0 > Kinn LLEN admins >2 RPOP admins > Manolo
  • 36. 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
  • 37. Conjuntos SADD page:6:visitors 253 SADD page:6:visitors 923 SADD page:6:visitors 13 SINTER page:3:visitors page:6:visitors > 253
  • 38. Conjuntos sortidos ZADD highscores 2930 Kinn ZADD highscores 1500 Manolo ZREVRANGE highscores 0 10 WITHSCORES > Kinn > 2930 > Manolo > 1500
  • 39. Exemplo Listas array(‘foo’, ‘bar’); Conjuntos suffle(array(‘foo’, ‘bar’)); Conjuntos sortidos ksort(array(3 => ‘foo’, 1 => ‘bar’));
  • 40. Os tipos básicos de cada linguagem existem no redis
  • 41. Processe dados no redis ao invés do PHP
  • 42. 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
  • 44. Pub/Sub • Redis faz BroadCast!!!!!!
  • 45. Pub/Sub SUBSCRIBE mensagem SUBSCRIBE chan1 chan2 chan3 PUBLISH mensagem “Ola Mundo” PSUBSCRIBE chat.*
  • 47. Goodies • Replicação Master/Slave • Transações: MULTI / EXEC / DISCARD
  • 49. Future Goodies • Lua Scripting: EVAL
  • 50. Future Goodies : Cluster
  • 51. Future Goodies : Cluster • Redis Cluster ( Tão atrasado quanto o PHP 6 )
  • 52. Future Goodies : Cluster Velocidade Redis é rápido É muito improvável que CPU seja gargalo
  • 53. Future Goodies : Cluster Velocidade
  • 54. Future Goodies : Cluster Redis é rápido
  • 55. Future Goodies : Cluster É muito improvável que CPU seja gargalo
  • 56. Future Goodies : Cluster O que você faz quando está sem RAM?
  • 57. Future Goodies : Cluster Esperar pelo cluster Redis? Se você puder... o Cluster é parece ser ótimo
  • 58. 2 centavos Armazene em disco. Carregue hot-data na memória.
  • 59. Uso • WEB SCALE • THE CLOUD • NOSQL • ELASTIC • HORIZONTAL SCALING • VERTICAL TOO
  • 60. Uso • WEB SCALE • THE CLOUD • NOSQL • ELASTIC • HORIZONTAL SCALING • VERTICAL TOO
  • 62. Caia na real Se você precisa escalar, sua base de dados não vai magicamente fazer isso por você
  • 63. Uso Então para que realmente ele é bom?
  • 64. Uso • Armazenamento de sessões • Cache • Qualquer outra coisa que o memcached faça
  • 65. Uso • Cache: Site de noticias • Leituras caras • Mudança rápida de páginas • Tracking dinâmico do que o usuário está fazendo
  • 66. Uso • Cache: Site de noticias Cacheando resultados genéricos: SETEX <id da página>:content 600 <dados>
  • 67. Uso • Lista de jobs BRPOP fila LPUSH fila “descrição do job” ex: Lib resque do GitHub https://github.com/defunkt/resque/
  • 68. Aplicações • Ajax pooling • Serviço de compartilhamento de diretório ( GitHub) • CSRF tokens • Tokens temporários de OAuth • Cache • Chat
  • 69. E o PHP? Entra aonde?
  • 70. PHP + Redis Extensão phpredis http://github.com/nicolasff/phpredis
  • 72. 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’);
  • 73. PHP + Redis Extensão phpiredis http://github.com/seppo0010/phpiredis
  • 74. phpiredis • Parsing de protocolo • Baixo nível
  • 75. phpredis $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’);
  • 76. PHP + Redis Extensão Predis http://github.com/nrk/predis
  • 77. Predis • Master/Slave auto select • Pode fazer uso do phpiredis para parsing • Symfony bundle
  • 78. PHP + Redis Doctrine cache layer
  • 79. Doctrine • Cache de query results diretamente no redis.
  • 80. Redis • É rápido! • É divertido! • Try-it try.redis-db.com
  • 81. Obrigado @kinncj kinncj@php.net • http://rediscookbook.org/pubsub_for_synchronous_communication.html - The chat application • http://redis.io/topics/twitter-clone/ - A micro-blogging application • http://docs.doctrine-project.org/en/latest/reference/caching.html - Doctrine cache • http://highscalability.com/blog/2011/7/6/11-common-web-use-cases-solved-in-redis.html - Use cases • http://redis.io/ • https://github.com/kinncj/Redis---PHPMSCONF2012