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
• Cos...
¿Qué es redis?
SET nombre “Daniel”
• REmote DIrectory Server
• 20k líneas en C++ de Salvatore Sanfilippo GET nombre
=> “Da...
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 … .Net

re...
Sobre servicestack.redis

• Tienes al menos 3 interfaz para el servicio de Redis

• IRedisNativeClient tienes los mismos n...
¿Quién usa redis?

http://redis.io/topics/whos-using-redis
Tipos de datos de valor
Las claves
• Son simple string
• Deben ser únicas
• Seudo nomenclatura

• “objeto-tipo:id:campo”
• “nivelMayornivelInferio...
String

key

string

Operaciones
Get
Set

• Tipo de dato simple
• {Json} u otro formato serializado

Append
Lista
Operaciones
RPush
key

LRange
LIndex
LPop
Lista
Operaciones
RPush
key

LRange
A

B

C

LIndex
LPop
Lista
Operaciones
RPush
key

LRange
C

A

B

C

LIndex
LPop
Lista
Operaciones
RPush
key

LRange
C

A

B

C

LIndex
LPop

LPop
Lista
Operaciones
RPush
key

LRange
C

A

B

C

LIndex
LPop

LPop

RPop
Set

Operaciones

B

SAdd
key

A

SRem
C

SMembers
SIsMember
Order Set
Operaciones
ZAdd
C:1

ZRange
ZRangeByScore

key

A:3
X:3
B:5

ZRem
Hash
key

Operaciones

Sub-clave 1

valor

Sub-clave 2

valor

HGet

Sub-clave 3

valor

HGetAll

HSet

HDel
Contador
• Contadores atómicos
• INCR “user:id”
Publicador / suscriptor
Transacción
Caso #1 Cache

cache
Caso #2 Page Counter
• ActionFilter de MVC

pageCounter

Controller : Action

100
Caso #2 Page Counter
• ActionFilter de MVC

pageCounter

Controller : Action

100

Home : Index

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

Amigos online

Mis amigos
Caso #3 ¿Quien esta en línea?

Usuarios online

Amigos online

Mis amigos

userLive:201311081630
userLive:201311081631
use...
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

leer
Read
Model

while(true)
{
calcularView();
}
Caso #4 ReadModel en un CQRS

Quick
Updater

escribir

Batch
Updater

leer
Read
Model

while(true)
{
calcularView();
}
Caso #4 ReadModel en un CQRS

Quick
Updater

escribir

escribir

Pub/sub
Batch
Updater

leer
Read
Model

while(true)
{
cal...
Caso #4 ReadModel en un CQRS

Quick
Updater

escribir

escribir

Pub/sub
Batch
Updater

leer
Read
Model

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 ...
Conclusión
• Redis = Rápido
• Redis = Mas que Key-Value
• El código de la sesión esta en:
https://github.com/tokiota/BcnDe...
Preguntas?
MERCI
GRACIAS
THANKS

Resum Executiu

東京‘

TOKIOTA
Upcoming SlideShare
Loading in …5
×

Pon tus aplicaciones a 100 con redis

520 views

Published on

Sesion de la conferencia BcnDevCon 2013
Redis
NoSQL

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
520
On SlideShare
0
From Embeds
0
Number of Embeds
203
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Pon tus aplicaciones a 100 con redis

  1. 1. Pon tus aplicaciones a 100 con Redis Daniel Mazzini Arquitecto @Tokiota
  2. 2. Acerca de .. • Esposo y padre • Arquitecto en @tokiota (estrenando Gold Partner) 東京‘ TOKIOTA
  3. 3. NOSQL … el porque • Base de datos relacionales: • Gran cantidad de datos • Concurrencia / bloqueo • Schemas vs Agile • Coste de licenciamientos • Modelos de NoSQL • Key – Value
  4. 4. ¿Qué es redis? SET nombre “Daniel” • REmote DIrectory Server • 20k líneas en C++ de Salvatore Sanfilippo GET nombre => “Daniel” • Open source • Actualmente patrocinado por VMware • Servidor de estructuras de datos en memoria
  5. 5. en memoria… Pero configurándolo puede persistir a disco…
  6. 6. ¿Por qué redis? • Es realmente muy rápida • Single Thread • Muchos clientes • • • • Java Ruby Python Y como no … .Net redis-benchmark -r 1000000 -q Los ejemplos están con ServiceStack.Redis install-package servicestack.redis
  7. 7. 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 + abstracto - IRedisTypedClient<TPoco> > IRedisClient (string) > IRedisNativeClient (raw byte[])
  8. 8. ¿Quién usa redis? http://redis.io/topics/whos-using-redis
  9. 9. Tipos de datos de valor
  10. 10. Las claves • Son simple string • Deben ser únicas • Seudo nomenclatura • “objeto-tipo:id:campo” • “nivelMayornivelInferior” • Sin caracteres especiales • Pueden expirar
  11. 11. String key string Operaciones Get Set • Tipo de dato simple • {Json} u otro formato serializado Append
  12. 12. Lista Operaciones RPush key LRange LIndex LPop
  13. 13. Lista Operaciones RPush key LRange A B C LIndex LPop
  14. 14. Lista Operaciones RPush key LRange C A B C LIndex LPop
  15. 15. Lista Operaciones RPush key LRange C A B C LIndex LPop LPop
  16. 16. Lista Operaciones RPush key LRange C A B C LIndex LPop LPop RPop
  17. 17. Set Operaciones B SAdd key A SRem C SMembers SIsMember
  18. 18. Order Set Operaciones ZAdd C:1 ZRange ZRangeByScore key A:3 X:3 B:5 ZRem
  19. 19. Hash key Operaciones Sub-clave 1 valor Sub-clave 2 valor HGet Sub-clave 3 valor HGetAll HSet HDel
  20. 20. Contador • Contadores atómicos • INCR “user:id”
  21. 21. Publicador / suscriptor
  22. 22. Transacción
  23. 23. Caso #1 Cache cache
  24. 24. Caso #2 Page Counter • ActionFilter de MVC pageCounter Controller : Action 100
  25. 25. Caso #2 Page Counter • ActionFilter de MVC pageCounter Controller : Action 100 Home : Index 5
  26. 26. Caso #3 ¿Quien esta en línea? Usuarios online
  27. 27. Caso #3 ¿Quien esta en línea? Usuarios online Mis amigos
  28. 28. Caso #3 ¿Quien esta en línea? Usuarios online Amigos online Mis amigos
  29. 29. Caso #3 ¿Quien esta en línea? Usuarios online Amigos online Mis amigos userLive:201311081630 userLive:201311081631 userLive:201311081632 Por cada minuto, una clave
  30. 30. Caso #4 ReadModel en un CQRS Batch Updater while(true) { calcularView(); }
  31. 31. Caso #4 ReadModel en un CQRS Batch Updater Read Model while(true) { calcularView(); }
  32. 32. Caso #4 ReadModel en un CQRS Batch Updater leer Read Model while(true) { calcularView(); }
  33. 33. Caso #4 ReadModel en un CQRS Quick Updater escribir Batch Updater leer Read Model while(true) { calcularView(); }
  34. 34. Caso #4 ReadModel en un CQRS Quick Updater escribir escribir Pub/sub Batch Updater leer Read Model while(true) { calcularView(); }
  35. 35. Caso #4 ReadModel en un CQRS Quick Updater escribir escribir Pub/sub Batch Updater leer Read Model Power by redis  while(true) { calcularView(); }
  36. 36. 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
  37. 37. Conclusión • Redis = Rápido • Redis = Mas que Key-Value • El código de la sesión esta en: https://github.com/tokiota/BcnDevConRedis
  38. 38. Preguntas?
  39. 39. MERCI GRACIAS THANKS Resum Executiu 東京‘ TOKIOTA

×