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
of 39

Pon tus aplicaciones a 100 con redis

Sesion de la conferencia BcnDevCon 2013 Redis NoSQL
Published on: Mar 4, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Pon tus aplicaciones a 100 con redis

  • 1. Pon tus aplicaciones a 100 con Redis Daniel Mazzini Arquitecto @Tokiota
  • 2. Acerca de .. • Esposo y padre • Arquitecto en @tokiota (estrenando Gold Partner) 東京‘ TOKIOTA
  • 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. ¿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. en memoria… Pero configurándolo puede persistir a disco…
  • 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. 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. ¿Quién usa redis? http://redis.io/topics/whos-using-redis
  • 9. Tipos de datos de valor
  • 10. Las claves • Son simple string • Deben ser únicas • Seudo nomenclatura • “objeto-tipo:id:campo” • “nivelMayornivelInferior” • Sin caracteres especiales • Pueden expirar
  • 11. String key string Operaciones Get Set • Tipo de dato simple • {Json} u otro formato serializado Append
  • 12. Lista Operaciones RPush key LRange LIndex LPop
  • 13. Lista Operaciones RPush key LRange A B C LIndex LPop
  • 14. Lista Operaciones RPush key LRange C A B C LIndex LPop
  • 15. Lista Operaciones RPush key LRange C A B C LIndex LPop LPop
  • 16. Lista Operaciones RPush key LRange C A B C LIndex LPop LPop RPop
  • 17. Set Operaciones B SAdd key A SRem C SMembers SIsMember
  • 18. Order Set Operaciones ZAdd C:1 ZRange ZRangeByScore key A:3 X:3 B:5 ZRem
  • 19. Hash key Operaciones Sub-clave 1 valor Sub-clave 2 valor HGet Sub-clave 3 valor HGetAll HSet HDel
  • 20. Contador • Contadores atómicos • INCR “user:id”
  • 21. Publicador / suscriptor
  • 22. Transacción
  • 23. Caso #1 Cache cache
  • 24. Caso #2 Page Counter • ActionFilter de MVC pageCounter Controller : Action 100
  • 25. Caso #2 Page Counter • ActionFilter de MVC pageCounter Controller : Action 100 Home : Index 5
  • 26. Caso #3 ¿Quien esta en línea? Usuarios online
  • 27. Caso #3 ¿Quien esta en línea? Usuarios online Mis amigos
  • 28. Caso #3 ¿Quien esta en línea? Usuarios online Amigos online Mis amigos
  • 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. Caso #4 ReadModel en un CQRS Batch Updater while(true) { calcularView(); }
  • 31. Caso #4 ReadModel en un CQRS Batch Updater Read Model while(true) { calcularView(); }
  • 32. Caso #4 ReadModel en un CQRS Batch Updater leer Read Model while(true) { calcularView(); }
  • 33. Caso #4 ReadModel en un CQRS Quick Updater escribir Batch Updater leer Read Model while(true) { calcularView(); }
  • 34. Caso #4 ReadModel en un CQRS Quick Updater escribir escribir Pub/sub Batch Updater leer Read Model while(true) { calcularView(); }
  • 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. 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. 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. Preguntas?
  • 39. MERCI GRACIAS THANKS Resum Executiu 東京‘ TOKIOTA

Related Documents