Pon tus aplicaciones a 100 con redis

39
Pon tus aplicaciones a 100 con Redis Daniel Mazzini Arquitecto @Tokiota

Transcript of Pon tus aplicaciones a 100 con redis

Pon tus aplicaciones a 100 con Redis

Daniel Mazzini

Arquitecto @Tokiota

Acerca de ..

• Esposo y padre

• Arquitecto en @tokiota (estrenando Gold Partner)

東京‘TOKIOTA

NOSQL … el porque

• Base de datos relacionales:• Gran cantidad de datos

• Concurrencia / bloqueo

• Schemas vs Agile

• Coste de licenciamientos

• Modelos de NoSQL• Key – Value

¿Qué es redis?

• REmote DIrectory Server

• 20k líneas en C++ de Salvatore Sanfilippo

• Open source

• Actualmente patrocinado por VMware

• Servidor de estructuras de datos en memoria

SET nombre “Daniel”

GET nombre

=> “Daniel”

en memoria…

Pero configurándolo puede persistir a disco…

¿Por qué redis?

• Es realmente muy rápida

• Single Thread

• Muchos clientes• Java

• Ruby

• Python

• Y como no … .NetLos ejemplos están con ServiceStack.Redis

install-package servicestack.redis

redis-benchmark -r 1000000 -q

Sobre servicestack.redis

• Tienes al menos 3 interfaz para el servicio de Redis

• IRedisNativeClient tienes los mismos nombres de métodos que Redis

• Puedes usar la documentación de los comandos del propio sitio de redis

IRedisTypedClient<TPoco> >

IRedisClient (string) >

IRedisNativeClient (raw byte[])

+ a

bstra

cto

-

Tipos de datos de valor

Las claves

• Son simple string

• Deben ser únicas

• Seudo nomenclatura• “objeto-tipo:id:campo”

• “nivelMayor\nivelInferior”

• Sin caracteres especiales

• Pueden expirar

String

• Tipo de dato simple

• {Json} u otro formato serializado

Operaciones

Get

Set

Append

key string

Lista

Operaciones

RPush

LRange

LIndex

LPop

key

Lista

Operaciones

RPush

LRange

LIndex

LPop

A B Ckey

Lista

Operaciones

RPush

LRange

LIndex

LPop

A B CCkey

Lista

Operaciones

RPush

LRange

LIndex

LPop

A B CC

LPop

key

Lista

Operaciones

RPush

LRange

LIndex

LPop

A B CC

RPopLPop

key

Set

Operaciones

SAdd

SRem

SMembers

SIsMember

A

B

Ckey

Order Set

A : 3

B : 5

C : 1

key

Operaciones

ZAdd

ZRange

ZRangeByScore

ZRem

X : 3

Hash

Operaciones

HSet

HGet

HGetAll

HDel

key Sub-clave 1 valor

Sub-clave 2

Sub-clave 3

valor

valor

Contador

• Contadores atómicos• INCR “user:id”

Publicador / suscriptor

Transacción

Caso #1 Cache

cache

Caso #2 Page Counter

• ActionFilter de MVC

pageCounter 100Controller : Action

Caso #2 Page Counter

• ActionFilter de MVC

pageCounter

Home : Index

100Controller : Action

5

Caso #3 ¿Quien esta en línea?

Usuarios online

Caso #3 ¿Quien esta en línea?

Usuarios online Mis amigos

Caso #3 ¿Quien esta en línea?

Usuarios online Mis amigosAmigos online

Caso #3 ¿Quien esta en línea?

userLive:201311081630

userLive:201311081631

userLive:201311081632

Usuarios online Mis amigosAmigos online

Por cada minuto, una clave

Caso #4 ReadModel en un CQRS

Batch

Updater

while(true)

{

calcularView();

}

Caso #4 ReadModel en un CQRS

Batch

Updater

Read

Model

while(true)

{

calcularView();

}

Caso #4 ReadModel en un CQRS

Batch

Updater

Read

Model

while(true)

{

calcularView();

}

leer

Caso #4 ReadModel en un CQRS

Batch

Updater

Read

Model

while(true)

{

calcularView();

}

escribir Quick

Updater

leer

Caso #4 ReadModel en un CQRS

Batch

Updater

Read

Model

while(true)

{

calcularView();

}

escribir Quick

Updater

leer

escribir

Pub/sub

Caso #4 ReadModel en un CQRS

Batch

Updater

Read

Model

while(true)

{

calcularView();

}

escribir Quick

Updater

leer

escribir

Pub/sub

Power by redis

Caso #5 Autocomplete

ZADD “P” 0

ZADD “PL” 0

ZADD “PLA” 0

ZADD “PLAN” 0

ZADD “PLAN*” 0

ZADD “PLANE” 0

ZADD “PLANET” 0

ZADD “PLANETA*” 0

ZADD “PLANI” 0

ZADD “PLANIF” 0

ZADD “PLANIFI” 0

ZADD “PLANIFIC” 0

ZADD “PLANIFICA” 0

ZADD “PLANIFICAD” 0

ZADD “PLANIFICADO” 0

ZADD “PLANIFICADOR*” 0

Conclusión

• Redis = Rápido

• Redis = Mas que Key-Value

• El código de la sesión esta en:

https://github.com/tokiota/BcnDevConRedis

Preguntas?

Resum Executiu 東京‘TOKIOTA

MERCIGRACIASTHANKS