Otimizando sites com o
     NoSQL Redis

   Allisson Azevedo – V Ensol
   allisson arroba gmail.com
      twitter.com/allisson
    slideshare.net/allisson
Allisson Azevedo
➔   Graduação no curso de Licenciatura em
    Computação – UEPB
➔   Desenvolvedor web
    ➔   Django|Tornado|Rails|NodeJS
    ➔   MySQL|PostgreSQL
    ➔   MongoDB|Redis
➔   Arquiteturas escaláveis
Redis
➔   Código Aberto – Licença BSD
    ➔   Salvatore Sanfilippo (antirez) (2009)
    ➔   2.2.11
    ➔   http://github.com/antirez/redis
    ➔   Escrito em C (padrão C99)
    ➔   http://redis.io/
➔   Banco de dados chave-valor avançado
➔   Dados em memória
    ➔   http://www.infoq.com/news/2008/06/ram-is-disk
http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf
Redis
➔   Persistência em disco
➔   Replicação mestre-escravo
➔   Cluster (redis 3.0?)
Instalação
➔   Dependências
    ➔   sudo apt-get install build-essential
    ➔   yum install gcc make
➔   tar xvzf redis-2.2.11.tar.gz
➔   cd redis-2.2.11/
➔   make
➔   make test (opcional, necessita do tcl8.5
    instalado)
➔   src/redis-server
Persistência
➔   Snapshotting
    ➔   Padrão
    ➔   Cópia dos dados em disco de forma periódica
    ➔   save x y: Depois de x segundos, salve se ao
        menos y chaves forem modificadas
        ➔   save 900 1
    ➔   Como a cópia é periódica, dados podem ser
        perdidos durante um crash
Persistência
➔   Append-only file
    ➔   Desde a versão 1.1
    ➔   Evita possíveis perdas de dados do
        snapshotting
    ➔   BGREWRITEAOF
Databases
➔   Suporte a múltiplos databases
➔   0 – 15
➔   0 é o padrão
Estruturas de dados
➔   Strings
    ➔   Qualquer tipo de dado, inclusive binários
Estruturas de dados
➔   Lists
    ➔   Uma lista de strings
    ➔   Acesso rápido nas pontas
    ➔   Não tão rápido no acesso aleatório
Estruturas de dados
➔   Sets
    ➔   Uma coleção de strings não ordenadas
    ➔   Não permite elementos repetidos
    ➔   Permite operações de união, diferença e
        intercessão
Estruturas de dados
➔   Sorted Sets
    ➔   Sets ordenados por um score
Estruturas de dados
➔   Hashes
    ➔   Permite armazenar vários valores em uma
        chave
Usos
➔   Task/Job Queues
    ➔   Resque (Ruby)
        –   http://github.com/blog/542-introducing-resque
    ➔   Celery (Python)
        –   http://celeryproject.org/
Usos
➔   Estatísticas de downloads
Usos
➔   Limitar uso de api
Usos
➔   Banners aleatórios
Usos
➔   Categorias/Tags
Usos
➔   Categorias/Tags
    ➔   Artigos relacionados
        ➔   Tag1 AND Tag2 → SINTER
        ➔   Tag1 OR Tag2 → SUNION
Usos
➔   Session store
    ➔   Django-redis-session (Django)
        –   http://bitbucket.org/dpaccoud/django-redis-
            sessions/overview
    ➔   Redis-session-store (Rails)
        –   http://github.com/mattmatt/redis-session-store
Usos
➔   Feed/Timeline
Usos
➔   Sugestões de amigos
Usos
➔   Wiki locking
Dúvidas?

Otimizando sites com o nosql redis

  • 1.
    Otimizando sites como NoSQL Redis Allisson Azevedo – V Ensol allisson arroba gmail.com twitter.com/allisson slideshare.net/allisson
  • 2.
    Allisson Azevedo ➔ Graduação no curso de Licenciatura em Computação – UEPB ➔ Desenvolvedor web ➔ Django|Tornado|Rails|NodeJS ➔ MySQL|PostgreSQL ➔ MongoDB|Redis ➔ Arquiteturas escaláveis
  • 3.
    Redis ➔ Código Aberto – Licença BSD ➔ Salvatore Sanfilippo (antirez) (2009) ➔ 2.2.11 ➔ http://github.com/antirez/redis ➔ Escrito em C (padrão C99) ➔ http://redis.io/ ➔ Banco de dados chave-valor avançado ➔ Dados em memória ➔ http://www.infoq.com/news/2008/06/ram-is-disk
  • 4.
  • 5.
    Redis ➔ Persistência em disco ➔ Replicação mestre-escravo ➔ Cluster (redis 3.0?)
  • 6.
    Instalação ➔ Dependências ➔ sudo apt-get install build-essential ➔ yum install gcc make ➔ tar xvzf redis-2.2.11.tar.gz ➔ cd redis-2.2.11/ ➔ make ➔ make test (opcional, necessita do tcl8.5 instalado) ➔ src/redis-server
  • 7.
    Persistência ➔ Snapshotting ➔ Padrão ➔ Cópia dos dados em disco de forma periódica ➔ save x y: Depois de x segundos, salve se ao menos y chaves forem modificadas ➔ save 900 1 ➔ Como a cópia é periódica, dados podem ser perdidos durante um crash
  • 9.
    Persistência ➔ Append-only file ➔ Desde a versão 1.1 ➔ Evita possíveis perdas de dados do snapshotting ➔ BGREWRITEAOF
  • 11.
    Databases ➔ Suporte a múltiplos databases ➔ 0 – 15 ➔ 0 é o padrão
  • 13.
    Estruturas de dados ➔ Strings ➔ Qualquer tipo de dado, inclusive binários
  • 15.
    Estruturas de dados ➔ Lists ➔ Uma lista de strings ➔ Acesso rápido nas pontas ➔ Não tão rápido no acesso aleatório
  • 19.
    Estruturas de dados ➔ Sets ➔ Uma coleção de strings não ordenadas ➔ Não permite elementos repetidos ➔ Permite operações de união, diferença e intercessão
  • 23.
    Estruturas de dados ➔ Sorted Sets ➔ Sets ordenados por um score
  • 28.
    Estruturas de dados ➔ Hashes ➔ Permite armazenar vários valores em uma chave
  • 30.
    Usos ➔ Task/Job Queues ➔ Resque (Ruby) – http://github.com/blog/542-introducing-resque ➔ Celery (Python) – http://celeryproject.org/
  • 31.
    Usos ➔ Estatísticas de downloads
  • 33.
    Usos ➔ Limitar uso de api
  • 35.
    Usos ➔ Banners aleatórios
  • 37.
    Usos ➔ Categorias/Tags
  • 39.
    Usos ➔ Categorias/Tags ➔ Artigos relacionados ➔ Tag1 AND Tag2 → SINTER ➔ Tag1 OR Tag2 → SUNION
  • 41.
    Usos ➔ Session store ➔ Django-redis-session (Django) – http://bitbucket.org/dpaccoud/django-redis- sessions/overview ➔ Redis-session-store (Rails) – http://github.com/mattmatt/redis-session-store
  • 42.
    Usos ➔ Feed/Timeline
  • 44.
    Usos ➔ Sugestões de amigos
  • 47.
    Usos ➔ Wiki locking
  • 49.