Integrando Redis en aplicaciones Symfony2

download Integrando Redis en aplicaciones Symfony2

of 105

  • date post

    11-Nov-2014
  • Category

    Technology

  • view

    1.210
  • download

    2

Embed Size (px)

description

Sus múltiples casos de usos y su excepcional rendimiento hacen que Redis sea hoy una pieza clave en la arquitectura de aplicaciones altamente dinámicas. En la charla se expone de forma práctica cómo puede integrarse Redis en una aplicación Symfoy y cómo pueden implementarse varias de las características de las aplicaciones usando Redis, como por ejemplo: Session storage, Monolog logging handlers, Doctrine caching, SwiftMailer spooling, Profiler storage, Data Collector for Symfony2 Profiler. Además de estos casos de uso generales, se comentan otros casos de usos específicos de aplicaciones que por su naturaleza no pueden beneficiarse de una capa de cache y se requiere por tanto una herramienta eficiente y escalable para resolver ciertos tipos de problemas.

Transcript of Integrando Redis en aplicaciones Symfony2

  • 1. Monday, June 24, 13
  • 2. Monday, June 24, 13
  • 3. Quin soy? Backend Core Tech Lead @SocialpointArquitectura y desarrollo de aplicaciones queecientemente respondan peticiones de millones deusuarios cada da Redis Fan Made in Cuba Poco original eligiendo memes @ronnyltMonday, June 24, 13
  • 4. Hablemos de algunosde nuestros desafoscomo desarrolladoresMonday, June 24, 13
  • 5. Tenemos aplicaciones quepor su naturaleza no esposible usar una cacheMonday, June 24, 13
  • 6. Tenemos cientos, miles,de usuarios concurrentes ynecesitamos una solucinescalable para almacenar lassesionesMonday, June 24, 13
  • 7. Queremos saber quiny cmo se est usandonuestra aplicacinMonday, June 24, 13
  • 8. Redis WTF?Redis FTW!Monday, June 24, 13
  • 9. Agenda Redis y sus caractersticas Entendiendo Redis Conectando desde PHP Integrando Redis en Symfony2 Casos de usoMonday, June 24, 13
  • 10. REDISYSUSCARACTERSTICASMonday, June 24, 13
  • 11. Qu es Redis? REmote DIctionary Server Creado en 2009 por Salvatore Sanlipo(@antirez) Open sourceMonday, June 24, 13
  • 12. Mejor denido como:NoSQLMonday, June 24, 13
  • 13. Monday, June 24, 13
  • 14. advancedin-memorykey-valuedata-structure serverRedisMonday, June 24, 13
  • 15. Data Structure Server Cadenas Listas Conjuntos Conjuntos ordenados Hashes (hash maps)Monday, June 24, 13
  • 16. In-memory Database Datos deben caber en memoria Persistencia congurable Memory is the new disc, disc is the newtapeMonday, June 24, 13
  • 17. Advanced key-valuestore database Persistencia (snapshot, append-only le) Replicacin (master/slave) Transacciones Pipelining Publisher/Subscriber (pub/sub) Lua scriptingMonday, June 24, 13
  • 18. Ideal para Analticas real-time Tracking Caching server (memcached on steroid) Colas de trabajo Escritura/Lectura intensiva (sesiones)Monday, June 24, 13
  • 19. ENTENDIENDOREDISMonday, June 24, 13
  • 20. Claves y valores Los datos (values) son refereciados a travsde claves (keys) Los datos pueden ser recuperados solo siconocemos el nombre de la claveMonday, June 24, 13
  • 21. Claves(keys) nicas dentro de la BD Binary safe string Claves muy grandes pueden impactar en elrendimimiento Claves muy pequeas no aportan mucho(u:123:n vs user:123:name)Monday, June 24, 13
  • 22. No es un RMDBS No hay consultas (queries) No hay ndices No hay esquemasMonday, June 24, 13
  • 23. Monday, June 24, 13
  • 24. Comandos Lenguaje de comandos fcil de usar y deaprender Los comandos (en su mayora) son aplicablesa un tipo de datos especcoMonday, June 24, 13
  • 25. Tipos de datosCadenasListasConjuntosConjuntos ordenadosHashesData structure serverMonday, June 24, 13
  • 26. Cadenas Tipo de dato simple (cualquier cadena binary-safe) Tamao mximo de 512 MBkey stringGET, SET, STRLEN,APPEND, GETRANGE, SETRANGEhttp://redis.io/commands#stringMonday, June 24, 13
  • 27. Casos de uso cadenas Almacenamiento de cualquier dato (serializado):GET, SET Vector de acceso aleatorio con GETRANGE,SETRANGE Mapa de bits usando GETBIT, SETBIT,BITCOUNTMonday, June 24, 13
  • 28. Casos de uso cadenas Contadores atmicos con:INCR, DECRINCRBY, DECRBYINCRFLOATBYINCR dowloads:item:123=> 450INCR dowloads:item:123=> 451Monday, June 24, 13
  • 29. Listas Listado de cadenas donde el orden es importante Operaciones de insercin por la izquierda y porla derecha o por posicin Mxima longitud de 2^32 -1 (+4 billones)key s2s1 s3...http://redis.io/commands#listMonday, June 24, 13
  • 30. Casos de uso Listas Representacin de colas (insertando por laderecha, leyendo por la izquierda) RPUSH, LPOP Representacin de pilas (insertando y leyendo porla izquierda) LPUSH, LPOP Comandos blocking BLPOP, BRPOP, BRPOPLPUSHMonday, June 24, 13
  • 31. Conjuntos Coleccin de elementos nicos donde elorden no importa Operaciones tpicas de conjuntos sobre losdatoskeybluegreenredblackMonday, June 24, 13
  • 32. Operaciones deconjuntosSINTERSECT SUNIONSDIFFMonday, June 24, 13
  • 33. Casos de usoConjuntos Representacin de relaciones Tracking de sucesos nicos Cualquier problema donde por su naturaleza serealicen operaciones sobre conjuntosMonday, June 24, 13
  • 34. Conjuntos Ordenados Conjuntos de datos, pero ordenados porun score Elementos nicos dentro del conjunto, cadauno con un score asignadokeyblue 520green 890red 303black 680Monday, June 24, 13
  • 35. Conjuntos Ordenados Operaciones de conjuntos aplicables Operaciones de acceso por score y por rango entiempo constante y predeciblehttp://redis.io/commands#sorted_setMonday, June 24, 13
  • 36. Casos de usoConjuntos Ordenados Leaderboards Rankings Tracking basado en tiempoMonday, June 24, 13
  • 37. Hashes Mltiples campo => valor en una misma clave Hasta un mximo de 2^32 -1 pares campo => valorkey eld1 value1eld2 value2eld3 value3http://redis.io/commands#hashMonday, June 24, 13
  • 38. Hashes Puede verse como un arreglo asociativo en PHP:clave => [campo1 => valor1,campo2 => valor2,campo3 => valor3] Operaciones sobre campos individualesMonday, June 24, 13
  • 39. Casos de uso Hashes Almacenamiento de objetos compuestospor varios campos MappingsMonday, June 24, 13
  • 40. Resumiendo... Tenemos la oportunidad de usar la estructurade datos adecuada para cada tipo de problema Tendremos tiempos de ejecucin constantes ypredecibles, sin importar el tamao de losconjuntos de datos (dataset)Monday, June 24, 13
  • 41. CONECTANDODESDEPHPMonday, June 24, 13
  • 42. Clientes para PHP https://github.com/nrk/predis https://github.com/nicolasff/phpredisClientes disponibles para la mayora de los lenguajes deprogramacin (http://redis.io/clients)Monday, June 24, 13
  • 43. Predis"require": {"predis/predis": "~0.8.3"}, Escrito en PHP Maduro y activamente mantenido Extensible Feature-complete (pipelines, client side sharding,server proles, master/slave cong, etc.)Monday, June 24, 13
  • 44. phpredis Escrito en C como una extensin PHP Listo para produccin Extremadamente rpido No backward compatible con anterioresversions de RedisMonday, June 24, 13
  • 45. Cul usar? Depende... Predis cubre la mayora de las necesidades,fcil de instalar con composer, y nos ofreceun rendimiento aceptable phpredis si necesitas un rendimientoexcepcionalMonday, Jun