de cache a nosql.


Roberto Marin      
robertomarin@gmail.com     

https://github.com/robertomarin/redis-de-cache-a-nosql      
https://slides.com/robertomarin/redis        

o que o redis não é



        Somente um key/value store: Memcached

        Um banco de dados relacional: MySQL, Oracle, PostGre

        Um banco orientado a documentos: MongoDB, CouchDB

        Um cache: Redis é tão persistente quando PostGre
                -> Redis Persistence Demystified

redis?


REmote DIctionary Server


Criado em 2009 por

Salvatore Sanfilippo



A notícia



REDIS MEMCACHE MEMCACHED


Documentacão


http://redis.io/documentation

http://redis.io/commands

http://redis.io/clients

http://try.redis.io

Instalando o redis



Baixe a versão atual: http://redis.io/download


Descompacte

$ make$ make test $ make install 

INICIANDO O REDIS



$ redis-server redis.conf

GETTING STARTED $_console


INFO


GET/SET


INCR/DECR


    

Clientes Java



Jedis 
(mais maduro, mais conhecido)

Redisson 
(interessante, diferentes features)




Exemplos {$code}


Redis01.java

Redis02.java


CONFIGuração


redis.conf


redis-1200.conf




Replicação


$ SLAVEOF host port

Sharding




O que é sharding?



Quando devo usar sharding?


Sharding


Configurações dos Shards



Iniciar os Shards



Exemplo:

Redis03Sharding.java




IS THIS REAL LIFE ?


CEP - Código Postal


Base em MySQL

Cache com Redis

CepTest.java

Performance?!~ 

CEP DAO com redis

antesDeIrNoBanco()
tenta recuperar do redis; se não for nulo transforma em objeto; retorna objeto;   senão recupera do banco; transforma em string(json); armazena no redis; retorna objeto;
CepRedisDaoTest.java

O que tem de bom?


  • temos um cache :)


o que tem de ruim?


  • acoplamento :(
  • uma classe extra ;@

Quem poderá nos defender?





AOP

aspect oriented programming

mas O que é AOP mesmo?




SQL + REDIS + AOP



Lembrando, estamos resolvendo:

  • acoplamento :(
  • uma classe extra ;@


CepAopTest.java

O QUE TEM DE BOM?


  • único código para todos :D
  • pouco acoplamento ;P


O QUE TEM DE RUIM?

  • pointcut não é tão customizável =(
  • e se eu quiser colocar um expires  :@

    SQL + REDIS + AOP + @ANNOTATION 

    =

    POWER

    SQL + REDIS + AOP + @ANNOTATION 




    CepAopTest.java

    RedisAnnotationAspect.java


    expires...

    O QUE TEM DE BOM?


    • único código para todos :D 
    • pouco acoplamento  ;P
    • expires e outras features =)

    O QUE TEM DE RUIM?

    não sei, mas pode ficar melhor!

    E se a fonte de dados cair?


    webservice

    banco de dados

    como o cache pode nos ajudar?

    em vez de guardarmos apenas o objeto no redis

    nós guardamos um envelope

    que tem o objeto dentro! :D

    SQL + REDIS + AOP + @ANNOTATION + HA 





    RedisAnnotationHAAspect.java

    É certo fazer isso? 


    Agora que a gente fez tudo isso...




    Por que não deixar toda a base de CEPs no Redis?


    É confiável?

    outras estruturas com redis


    HASHES

    LISTS

    SETS

    SORTED SETS




     +=




    Obrigado! 

    Dúvidas? :)



    Roberto Marin    
    robertomarin@gmail.com     

    Made with Slides.com