FEUCTEC 2016 - Hub de eventos com redis

Post on 09-Feb-2017

41 views 1 download

Transcript of FEUCTEC 2016 - Hub de eventos com redis

About me ;DCharles LomboniDesenvolvedor .NET na MundiPagg

Desenvolvedor .NET e SharePoint, entusiasta por segurança, tecnologias e música. Desde 2009 vem adquirindo experiência em diversos desafios. Reconhecido por alguns prêmios como o Jaccques Franquelin Award 2013, com o sistema Techchannel, um “youtube” para ensino, feito em Sharepoint. Atualmente faz parte do time Authorizer da MundiPagg/Stone, onde se diverte todo dia programando.

Contato: charleslomboni@gmail.com

Um pouco da mundi/stone <3

Hub de eventos com

O que é Redis?Uma estrutura de dados na memória, categorizado como banco de dados não relacional – NoSQL (Not Only SQL). Ele oferece suporte a estruturas como strings, hashes, lists, sets, sorted sets com intervalos de consultas, bitmaps, hyperloglogs e geospatial indexes. Oferece replicação nativa, scripts lua, LRU eviction, transações, pub/sub e diferentes níveis de persistência em disco.

Tipos de estruturas ;)

string[] operationSystem = { “Windows”, “Linux”, “Mac” };

Porque usar Redis?

Porque não usar Redis?

Eles usam ;P

var motivacao = “Utilizar o Redis para armazenar e recuperar dados em memória para um cenário real e, utilizar os recursos de PUBLISH e SUBSCRIBE para comunicar assincronamente mensagens entre cliente e servidor, criando assim, um Hub de eventos.”

/*só teoria não né?

Obrigado!*/

Pasta do Redis

redis-server

redis-cli

Armazenamento SETRedis-cli

127.0.0.1:6379> SET minhaChave "meu valor"OK127.0.0.1:6379> GET minhaChave"meu valor"

Código C#

redisClient.SetAsync(redisKey, "Redis no .NET!!! Mandando bala!").Wait();Console.WriteLine("Chave {0} criada com sucesso!", redisKey);

var redisReturn = redisClient.GetAsync(redisKey).Result.As<string>();Console.WriteLine("Valor {0} da chave {1} criada com sucesso!", redisReturn, redisKey);

Armazenamento DELRedis-cli

127.0.0.1:6379> DEL minhaChave(integer) 1

Código C#

redisClient.SetAsync(redisKeyDelete, "RedisBoost Delete key.").Wait();Console.WriteLine("Chave {0} criada para ser deletada...", redisKeyDelete);

var resultDelete = redisClient.DelAsync(redisKeyDelete).Result;Console.WriteLine("Chave {0} foi deletada? {1}", redisKeyDelete, Convert.ToBoolean(resultDelete));

$”{usando no mundo real}”

Casos reais para uso do Redis { aqui a parada é séria mermão ;D }

• Mostrar os últimos itens da sua página• Deletar e filtrar• Odernar por votos de usuários e tempo• Implementar tempo para expirar• Assegurar unicidade para N itens• Análise real de o que está acontecendo

•Publish/Subscribe• Filas

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

Agora vem

Pub/Sub no Redis

Pub/Sub no Redis nada mais é que um “Observer” Design Pattern

Pub/Sub <3

Assinando canais

127.0.0.1:6379> SUBSCRIBE nomeDoCanal

127.0.0.1:6379> SUBSCRIBE musica127.0.0.1:6379> SUBSCRIBE tecnologia127.0.0.1:6379> PSUBSCRIBE *

Publicando mensagens

127.0.0.1:6379> PUBLISH nomeDoCanal mensagem

127.0.0.1:6379> PUBLISH musica “Eh o tchan no havai”127.0.0.1:6379> PUBLISH tecnologia “Redis eh bacana! :D”127.0.0.1:6379> PUBLISH esseCanalNaoExiste “So o fofoqueiro escuta isso..”

Assinando canais

Assinando canais

Assinando canais

Publicando mensagens

$”{usando no mundo real ²}”

Casos reais parte 2

• Newsletter• Chat• Carrinho de compra

•Sua imaginação??

var mundipagg = new Mochileiros { NossaStack = "Nós também usamos Redis :)" };

/* mais motivos para usar? */• Independe de tecnologia• Fast and furious• Desacopla a aplicação• Escalonável• Realiza a ingestão de milhares de registros por segundo• Transmitir para vários aplicativos• Trabalho assíncrono• Trabalha como ingestor de eventos• Uma camada/aplicação, não precisa conhecer o que a outra faz

Knowledge Sharing

• https://charleslomboni.wordpress.com/2016/08/12/hub-de-eventos-com-redis/

• https://github.com/charleslomboni/Exemplos-Redis

FINISH HIM