SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
Acelerando
                       aplicaciones Symfony 2
                                 con



                               Ronny López
                                @ronnylt
Thursday, May 31, 12
¿Quién soy?
                Ronny López
                @ronnylt

                Desarrollador @pricebets

                Usando Redis+Symfony2 desde abril 2011




Thursday, May 31, 12
Sumario
              1. Introducción a Redis advanced key-value store

              2. Principales características y tipos de datos

              3. Casos de uso generales

              4. Integración con Symfony2
                  ◦ Session storage
                  ◦ Monolog logging handlers
                  ◦ SwiftMailer spooling
                  ◦ Profiler storage
                  ◦ Doctrine caching
                  ◦ Data Collector for Symfony2 Profiler
                  ◦ Dynamic routing

              5. Ejemplos y preguntas




Thursday, May 31, 12
¿Por qué Redis?
                Descubrí Redis cuando una consulta como esta
                hacia que una página demorara +15 segundos
                en cargar:

                       SELECT value FROM odds
                       INNER JOIN outcomes ON ...
                       INNER JOIN bets ON ...
                       INNER JOIN markets ON ...
                       WHERE ... ORDER BY ...



Thursday, May 31, 12
Problemas

                       • Hay tareas que no necesitan tanta
                         complejidad
                       • El modelo relacional actual es difícil de
                         escalar horizontalmente
                       • No se pueden modelar problemas comunes
                         lo suficientemente bien



Thursday, May 31, 12
¿Qué es Redis?
                       • Remote dictionary server
                       • Motor de almacenamiento clave-valor
                         avanzado, rápido y persistente
                       • Servidor de estructuras de datos
                       • NoSQL (Not-only SQL)
                       • Open source (patrocinado por VMWare)
Thursday, May 31, 12
Características
                               principales
                       • Alto rendimiento en escritura y lectura
                       • Soporte de operaciones atómicas
                       • Soporte de transacciones
                       • Persistencia !

Thursday, May 31, 12
Características
                               Simplicidad

                       • Fácil instalación
                       • Curva de aprendizaje relativamente baja
                       • Lenguage de comandos fácil de utilizar y
                         aprender




Thursday, May 31, 12
Características
                                Previsibilidad
                       • La memoria es rápida, y permite a Redis
                           tener un redimiento muy fiable
                       • Operaciones sobre datasets de 10 mil
                           claves tendrán el mismo rendimiento que
                           sobre datasets de 50 millones de claves
                       •    La complejidad algorítmica de todos los
                           comandos está documentada


Thursday, May 31, 12
Características
                               Confiabilidad
                       • Todos los datos residen en memoria, y son
                         persistidos a disco eventualmente
                         (snapshots, append-only log)
                       • Replication system (master-slave) , pueden
                         configurarse múltiples esclavos. Un esclavo
                         puede ser el master de otro esclavo



Thursday, May 31, 12
Características
                               Persistencia
                       • RDB, Point-in-time snapshots en intervalos
                         configurados
                       • AOF (append-only file) cada operación de
                         escritura
                       • Es posible combinar RDB y AOF en la misma
                         instancia
                       • Se puede deshabilitar la persistencia del todo
Thursday, May 31, 12
Características
                               Versatilidad

                       • Adaptable a varios tipos de aplicaciones
                       • Modelado de los datos a partir de
                         estructuras de datos como listas,
                         conjuntos, conjuntos ordenados y hashes




Thursday, May 31, 12
Tipos de datos

                       • Redis NO es simplemente un motor de
                         almacenamiento clave-valor
                       • Es un servidor de estructuras de datos que
                         incluye varios tipos de datos predefinidos
                         (strings, lists, sets, sorted sets, hashes)




Thursday, May 31, 12
Tipos de datos
                                  Strings

                       • Es el tipo de dato más simple
                       • Si solamente usa este tipo de dato es
                         similar a usar un servidor memcached
                         pero con persistencia




Thursday, May 31, 12
Operaciones
                                  Strings
                       • Comandos SET/GET para escribir/leer
                       • Los valores pueden ser cualquier string no
                         mayor que 1 GB
                       • Si necesita almacenar algo más grande,
                         Redis is NOT for you ;)



Thursday, May 31, 12
Tipos de datos
                                 Integers
                       • Ideal para contadores atómicos
                         INCR count
                         > 1
                         INCR count
                         > 2
                         INCRBY count 5
                         > 7

Thursday, May 31, 12
Tipos de datos
                                   Lists

                       • Secuencia de elementos ordenados
                       • Uno de los tipos de datos más usados
                       • Encaja perfectamente como estructura de
                         datos ideal para resolver varios problemas




Thursday, May 31, 12
Tipos de datos
                                   Lists
                       • Listas doblemente enlazadas garantizan la
                         inserción en cualquier extremo en un
                         tiempo constante O(1)
                       • Con estas caterísticas puede usarse para
                         modelar una “cola”




Thursday, May 31, 12
Operaciones
                                   Lists
                       • LPUSH agrega un elemento en el extremo
                         izquierdo de la lista
                       • RPUSH en el extremo derecho
                       • LRANGE extrae elementos de la lista en
                         cierto rango



Thursday, May 31, 12
Operaciones
                                   Lists
                       • LPUSH, RPUSH, LPOP, RPOP, ...
                       • LINDEX, LINSERT, LLEN, ...
                       • LTRIM, LREM, ...

                       • http://redis.io/commands#list

Thursday, May 31, 12
Variantes “blocking”

                       • BLPOP, BRPOP, BRPOPLPUSH
                       • Bloquean la conexión (del cliente) cuando
                         no hay elementos en la lista
                       • Ideal para implementar colas de trabajos/
                         mensajes



Thursday, May 31, 12
Usos de las listas
                       • Utilice listas cada vez que requiera acceder
                         a los datos en el mismo orden en que se
                         agregan
                       • Ideal para casos en los que se requiere un
                         ORDER BY de SQL
                       • Escalable a millones de elementos
                         manteniendo el mismo rendimiento


Thursday, May 31, 12
Ejemplos de uso de las
                               listas

      •       Mantener un listado cronológico de los comentarios
              publicados en un blog
      •       Es posible paginar usando LRANGE de forma trivial

              $redis-cli RPOP post:123:comments c1
              $redis-cli RPOP post:123:comments cn
              $redis-cli LRANGE post:123:comments 50 60


Thursday, May 31, 12
Tipos de datos
                                   Sets
                       • Colección NO–ordenada de datos (conjuntos)
                       • Permite operaciones típicas sobre conjuntos
                         como unión, intersección, diferencia, etc...
                       • Estas operaciones son difíciles de implementar
                         en un modelo relacional



Thursday, May 31, 12
Operaciones
                                   Sets
                       • SADD, SREM, SCARD, SMEMBERS,
                         SISMEMBER, ...
                       • SUNION, SDIFF, SINTER, ...
                       • SPOP, SRAND, .... O(1)

                       • http://redis.io/commands#set
Thursday, May 31, 12
Tipos de datos
                               Sorted Sets
             • Un conjunto ordenado es un conjunto donde a
                       cada elemento se le asocia una puntuación
                       (score)
             • Este valor (score) determina el orden de los
                       elementos dentro del conjunto




Thursday, May 31, 12
Operaciones
                                Sorted Sets
                       • ZADD, ZREM, ZCARD, ZCOUNT,
                         ZINCR, ...
                       • ZSCORE, ZINCRBY, ZRANK, ...
                       • ZCOUNT, ....

                       • http://redis.io/commands#sorted_set
Thursday, May 31, 12
Tipos de datos
                                 Hashes
                       • Permiten que objetos compuestos se
                         almacenen en una clave específica
                       • Tipo de dato ideal para almacenar objetos
                         complejos en Redis, usando los atributos
                         del objeto como claves del hash




Thursday, May 31, 12
Operaciones
                                 Hashes
                       • HSET, HGET, HDEL, HEXIST, ...
                       • HKEYS, HGETALL, HVALS, ...
                       • HMGET, HMSET, ...


                       • http://redis.io/commands#hash
Thursday, May 31, 12
Casos de uso
                          Data caching




Thursday, May 31, 12
Data caching

                       • Redis como motor primario de cache
                         compartida
                       • Compartir datos cacheados entre múltiples
                         aplicaciones
                       • Como un memcached pero persistente

Thursday, May 31, 12
Casos de uso
                          Contadores




Thursday, May 31, 12
Contadores
                       • Gran cantidad de escrituras/lecturas
                       • Datos valiosos, pero NO críticos
                       • No encajan en el modelo relacional
                       • Insertar una fila en MySQL o actualizar un
                         contador en cada petición será sin dudas
                         difícil de escalar


Thursday, May 31, 12
Contadores

               $       INCR active:sports:spain
               >       0
               $       INCR active:sports:spain
               >       2
               $       INCR active:sports:italy
               >       ...



Thursday, May 31, 12
Casos de uso
                             Presencia
                         ¿Quién está online?




Thursday, May 31, 12
Presencia
                       • Mantener en un conjunto los usuarios que se
                         han detectado online en cada minuto

                         $ redis-cli SADD online:15:01 123
                         $ redis-cli SADD online:15:01 456

                         $ redis-cli SADD online:15:02 123




Thursday, May 31, 12
Presencia
                       • El conjunto de usuarios online se puede
                         obtener de la UNION de los conjuntos
                         relativos a los últimos ¿5? minutos.

                         A las 15:05
                         $ redis-cli SUNION online:15:01
                         online:15:02 online:15:03 online:
                         15:04 online:15:05
                         1) 123
                         2) 345

Thursday, May 31, 12
Presencia

                       • El conjunto de “amigos” online de cierto
                         usuario es otra operación sobre conjuntos

                         redis-cli SINTER online:15:01
                         online:15:02 online:15:03
                         online:15:04 online:15:05
                         user:123:friends



Thursday, May 31, 12
Casos de uso
                         Dymanic tracking




Thursday, May 31, 12
Dymamic Tracking
                       • Queremos mantener un listado de las
                         últimas 100 páginas visitadas en una web
                       • ¿Qué están leyendo los usuarios ahora?
                       • Mantenemos una lista y la limitamos a que
                         tenga solo 100 elementos
                       • Comparado a MongoDB capped collections

Thursday, May 31, 12
Dynamic Tracking



               LPUSH mylist somedata
               LTRIM mylist 0 99




Thursday, May 31, 12
Casos de uso
                         Tabla de posiciones
                         Real time data sorting




Thursday, May 31, 12
Tabla de posiciones
                       • Se necesita listar elementos ordenados por
                         una puntuación
                       • Las puntuaciones se actualizan en tiempo
                         real
                       • Consultas lentas por naturaleza
                         SELECT * FROM ... WHERE ... ORDER
                         BY ... LIMIT 10


Thursday, May 31, 12
Tabla de posiciones

       • Mantener un conjunto ordenado (sorted set) con
               los elementos y su score
               $ redis-cli ZADD popular:sports 10 football
               $ redis-cli ZADD popular:sports 6 basketball
               $ redis-cli ZADD popular:sports 12 football
               $ redis-cli ZREVRANGE popular:sports 0 9




Thursday, May 31, 12
Tabla de posiciones

       • Mantener un conjunto ordenado (sorted set) con
               los elementos y su score
               $ redis-cli ZADD popular:sports 10 football
               $ redis-cli ZADD popular:sports 6 basketball
               $ redis-cli ZADD popular:sports 12 football
               $ redis-cli ZREVRANGE popular:sports 0 9




Thursday, May 31, 12
Casos de uso
                           Logging




Thursday, May 31, 12
Loggin

                       • Redis como motor de almacenamiento de
                         logs
                       • Escribimos logs en orden en una lista, y la
                         limitamos a que tenga uan cierta cantidad
                         de elementos




Thursday, May 31, 12
Casos de uso
                           URL Routing
                          Data dictionary




Thursday, May 31, 12
URL Routing
                       • Convertir alias de URL a paths internos de
                         la aplicación

                         Ejemplo:

                         http://www.apuestas.com/futbol
                         => /sport/1

                         http://www.apuestas.com/futbol/espana/


Thursday, May 31, 12
URL Routing
                       • Convertir paths internos a friendly URLs
                         Ejemplo:
                          /sport/1
                         => http://www.apuestas.com/futbol

                         /competition/3120
                         http://www.apuestas.com/futbol/espana/
                         copa-del-rey


Thursday, May 31, 12
URL Routing

                       • Mantener un hash con el routing y otro con
                         los alias
                         redis-cli HSET routing /futbol /sport/1

                         redis-cli HSET alias /sport/1 /futbol




Thursday, May 31, 12
URL Generation
                                       Dictionary

          alias:example.com
                  Path (internal)                      URL

        sport/1                     /football


        article/1234                /news/football/very-nice-friendly-url


        user/345                    /users/spain/el-fary


Thursday, May 31, 12
URL Matching
                                   Dictionary



       routes:example.com
                             URL                  Path (internal)
      /football                                 sport/1

      /news/football/very-nice-friendly-url     article/1234


      /users/spain/el-fary                      user/345

Thursday, May 31, 12
Integración con
                          Symfony2



Thursday, May 31, 12
Integración con
                                Symfony2
                       • Construye tu propia integración
                       • Usa algún bundle de 3ras partes
                        • https://github.com/lessthan/LtRedisBundle
                        • https://github.com/snc/SncRedisBundle

Thursday, May 31, 12
Clientes para PHP

                       • Predis
                         https://github.com/nrk/predis
                       • PhpRedis
                         https://github.com/nicolasff/phpredis




Thursday, May 31, 12
Predis
                                https://github.com/nrk/predis



                       • Escrito en PHP
                       • Diferentes server profiles (versions)
                         https://github.com/nrk/predis#main-features




Thursday, May 31, 12
PhpRedis
                            https://github.com/nicolasff/phpredis



                       • PHP Extension
                       • Ligeramente más rápido
                       • No sporta todas las versiones


Thursday, May 31, 12
Conexiones
                       • Configuración de las conexiones a través de
                         los archivos de configuración de la aplicación




Thursday, May 31, 12
Session storage
                       • Redis como almacenamiento primario de
                         sessiones de Symfony2
                        • Persistente
                        • Rápido
                        • Replicable
                        • Escalable


Thursday, May 31, 12
Session storage
                       RedisSessionHandler implementation




Thursday, May 31, 12
Session storage
                       Configurando el handler de session




Thursday, May 31, 12
Session storage
   redis 127.0.0.1:6379> keys   *

   1) "sf2:session:pc5gsvnkap6q1ishmvf7lonba2"
   2) "sf2:session:cv1dnt9aradi7c1ehbo12gp410"

   redis 127.0.0.1:6379> get sf2:session:pc5gsvnkap6q1ishmvf7lonba2

   "_sf2_attributes|a:2:{s:4:"test";s:15:"testing session";s:
   5:"test1";s:15:"testing session";}_sf2_flashes|a:2:{s:
   7:"display";a:0:{}s:3:"new";a:0:{}}_sf2_meta|a:3:{s:1:"u";i:
   1338469484;s:1:"c";i:1338469484;s:1:"l";s:1:"0";}"
   redis 127.0.0.1:6379>




Thursday, May 31, 12
Monolog handler
                       • Redis como almacenamiento para logs
                        • Muy útil cuando se necesita conservar logs
                           para inspeccionar
                        • El filesystem es muy lento
                        • Fácil de leer desde otras aplicaciones
                           (monitoreo)




Thursday, May 31, 12
Monolog handler


          • Se implementa un servicio que actúe como un
                  custom Monolog Handler y utilice una lista de redis
                  para almacenar los logs
          • Configuración


Thursday, May 31, 12
SwiftMailer spooling
                       • Unsando una lista de Redis para hacer el mail
                         spooling
                         • La aplicación no ejecuta el envio de los
                           correos durante ningún request
                         • Los correos salientes son puestos en una cola
                         • Otro proceso (en otro nodo, por ejemplo) se
                           encarga de hacer el envio de los correos



Thursday, May 31, 12
Profiler storage

                       • Agregado al HttpKernel Component en la 2.1
                         https://github.com/symfony/symfony/blob/
                         master/src/Symfony/Component/HttpKernel/
                         Profiler/RedisProfilerStorage.php
                       • Usar como alternativa al
                         SquileteProfilerStorage o al FileProfilerStorage



Thursday, May 31, 12
Doctrine Caching

                       • Usado como almacenamiento primario para la
                         cache de metadatos, resultados, y query de
                         Doctrine
                       • Alternativa al APC cache que se usa
                         generalmente




Thursday, May 31, 12
Data Collector
                       • LtRedisBundle implementa un DataCollector
                         de los comandos enviados a Redis a través de
                         su cliente




Thursday, May 31, 12
Data Collector




Thursday, May 31, 12
Dynamic Routing

                • Necesitamos convertir URLs amigables a rutas
                       internas de Symfony2
                • No queremos tener que hacer una consulta a una
                       base de datos para generar cada URL amigables de
                       una página (Ej. Doctrine Route)




Thursday, May 31, 12
Dynamic Routing




Thursday, May 31, 12
Muchas gracias...



Thursday, May 31, 12

Weitere ähnliche Inhalte

Andere mochten auch

Modeliza de variables_climaticas2
Modeliza de variables_climaticas2Modeliza de variables_climaticas2
Modeliza de variables_climaticas2Lucas83
 
Monografia Metodologia Agil XP
Monografia Metodologia Agil XPMonografia Metodologia Agil XP
Monografia Metodologia Agil XPJorw Yengle
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Javier Eguiluz
 
Metaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScriptMetaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScriptJavier Vélez Reyes
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasosSoni BM
 
Introduccion Sig
Introduccion SigIntroduccion Sig
Introduccion SigC G
 
Programación Extrema
Programación ExtremaProgramación Extrema
Programación Extremaurumisama
 
SIG en la Web: Fundamentos
SIG en la Web: FundamentosSIG en la Web: Fundamentos
SIG en la Web: FundamentosLeandro Zamudio
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Ronny López
 
Fundamentos de un SIG e introducción a las Geodatabase
Fundamentos de un SIG e introducción a las GeodatabaseFundamentos de un SIG e introducción a las Geodatabase
Fundamentos de un SIG e introducción a las GeodatabaseLeandro Zamudio
 
Buenas prácticas en XHTML, CSS y Accesibilidad
Buenas prácticas en XHTML, CSS y AccesibilidadBuenas prácticas en XHTML, CSS y Accesibilidad
Buenas prácticas en XHTML, CSS y AccesibilidadFRONTDAYS
 
Introduccion a DOM y AJAX - Javier Oliver Fulguera
Introduccion a DOM y AJAX  -  Javier Oliver FulgueraIntroduccion a DOM y AJAX  -  Javier Oliver Fulguera
Introduccion a DOM y AJAX - Javier Oliver FulgueraJavier Oliver Fulguera
 
Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...
Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...
Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...Geopress
 
Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyJuan Eladio Sánchez Rosas
 

Andere mochten auch (20)

Modeliza de variables_climaticas2
Modeliza de variables_climaticas2Modeliza de variables_climaticas2
Modeliza de variables_climaticas2
 
Monografia Metodologia Agil XP
Monografia Metodologia Agil XPMonografia Metodologia Agil XP
Monografia Metodologia Agil XP
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
 
Web components
Web componentsWeb components
Web components
 
Metodologia rad XP
Metodologia rad XPMetodologia rad XP
Metodologia rad XP
 
Metodologia xp
Metodologia xpMetodologia xp
Metodologia xp
 
Aplicaciones Machine Learning GIS
Aplicaciones Machine Learning GISAplicaciones Machine Learning GIS
Aplicaciones Machine Learning GIS
 
Metaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScriptMetaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScript
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Introduccion Sig
Introduccion SigIntroduccion Sig
Introduccion Sig
 
Programación Extrema
Programación ExtremaProgramación Extrema
Programación Extrema
 
SIG en la Web: Fundamentos
SIG en la Web: FundamentosSIG en la Web: Fundamentos
SIG en la Web: Fundamentos
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2
 
Fundamentos de un SIG e introducción a las Geodatabase
Fundamentos de un SIG e introducción a las GeodatabaseFundamentos de un SIG e introducción a las Geodatabase
Fundamentos de un SIG e introducción a las Geodatabase
 
Buenas prácticas en XHTML, CSS y Accesibilidad
Buenas prácticas en XHTML, CSS y AccesibilidadBuenas prácticas en XHTML, CSS y Accesibilidad
Buenas prácticas en XHTML, CSS y Accesibilidad
 
Formularios al limite
Formularios al limiteFormularios al limite
Formularios al limite
 
Introduccion a DOM y AJAX - Javier Oliver Fulguera
Introduccion a DOM y AJAX  -  Javier Oliver FulgueraIntroduccion a DOM y AJAX  -  Javier Oliver Fulguera
Introduccion a DOM y AJAX - Javier Oliver Fulguera
 
Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...
Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...
Geomedia y SIG para el análisis de los bosques de ribera del Ebro. Enseñanza ...
 
Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfony
 
Monografia metodologia xp
Monografia   metodologia xpMonografia   metodologia xp
Monografia metodologia xp
 

Ähnlich wie Acelerando Symfony 2 con Redis

Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrolloJuan Ladetto
 
Taller Redis
Taller RedisTaller Redis
Taller Redisbetabeers
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Socialmetrix
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLRoanny Lamas
 
PRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 A
PRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 APRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 A
PRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 AChisurin
 
Las principales bases de datos existentes
Las principales bases de datos existentesLas principales bases de datos existentes
Las principales bases de datos existentesrulascch
 

Ähnlich wie Acelerando Symfony 2 con Redis (20)

Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
introduccion bases de datos
introduccion bases de datosintroduccion bases de datos
introduccion bases de datos
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
 
base de datos SQL y no-SQL
base de datos SQL y no-SQLbase de datos SQL y no-SQL
base de datos SQL y no-SQL
 
Base de datos
Base de datos Base de datos
Base de datos
 
Act4 bd teo
Act4 bd teoAct4 bd teo
Act4 bd teo
 
Grupo BD
Grupo BDGrupo BD
Grupo BD
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
 
Video_MartinFowler.pptx
Video_MartinFowler.pptxVideo_MartinFowler.pptx
Video_MartinFowler.pptx
 
Video_MartinFowler.pptx
Video_MartinFowler.pptxVideo_MartinFowler.pptx
Video_MartinFowler.pptx
 
clase 1 conceptos basicos.ppt
clase 1 conceptos basicos.pptclase 1 conceptos basicos.ppt
clase 1 conceptos basicos.ppt
 
PRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 A
PRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 APRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 A
PRESENTACION EVIDENCIAS RUBI VERONICA ISC J3 A
 
Evidencias1 (Diapositivas - Rubi Veronica)
Evidencias1 (Diapositivas  - Rubi Veronica)Evidencias1 (Diapositivas  - Rubi Veronica)
Evidencias1 (Diapositivas - Rubi Veronica)
 
Presentacion
PresentacionPresentacion
Presentacion
 
BASE DE DATOS
BASE DE DATOSBASE DE DATOS
BASE DE DATOS
 
proyecto base de datos 5ºA
proyecto base de datos  5ºAproyecto base de datos  5ºA
proyecto base de datos 5ºA
 
Gestor de base de datos
Gestor de base de datosGestor de base de datos
Gestor de base de datos
 
Sistema de gestor de base de datos
Sistema de gestor de base de datosSistema de gestor de base de datos
Sistema de gestor de base de datos
 
Las principales bases de datos existentes
Las principales bases de datos existentesLas principales bases de datos existentes
Las principales bases de datos existentes
 

Kürzlich hochgeladen

tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 

Kürzlich hochgeladen (20)

tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 

Acelerando Symfony 2 con Redis

  • 1. Acelerando aplicaciones Symfony 2 con Ronny López @ronnylt Thursday, May 31, 12
  • 2. ¿Quién soy? Ronny López @ronnylt Desarrollador @pricebets Usando Redis+Symfony2 desde abril 2011 Thursday, May 31, 12
  • 3. Sumario 1. Introducción a Redis advanced key-value store 2. Principales características y tipos de datos 3. Casos de uso generales 4. Integración con Symfony2 ◦ Session storage ◦ Monolog logging handlers ◦ SwiftMailer spooling ◦ Profiler storage ◦ Doctrine caching ◦ Data Collector for Symfony2 Profiler ◦ Dynamic routing 5. Ejemplos y preguntas Thursday, May 31, 12
  • 4. ¿Por qué Redis? Descubrí Redis cuando una consulta como esta hacia que una página demorara +15 segundos en cargar: SELECT value FROM odds INNER JOIN outcomes ON ... INNER JOIN bets ON ... INNER JOIN markets ON ... WHERE ... ORDER BY ... Thursday, May 31, 12
  • 5. Problemas • Hay tareas que no necesitan tanta complejidad • El modelo relacional actual es difícil de escalar horizontalmente • No se pueden modelar problemas comunes lo suficientemente bien Thursday, May 31, 12
  • 6. ¿Qué es Redis? • Remote dictionary server • Motor de almacenamiento clave-valor avanzado, rápido y persistente • Servidor de estructuras de datos • NoSQL (Not-only SQL) • Open source (patrocinado por VMWare) Thursday, May 31, 12
  • 7. Características principales • Alto rendimiento en escritura y lectura • Soporte de operaciones atómicas • Soporte de transacciones • Persistencia ! Thursday, May 31, 12
  • 8. Características Simplicidad • Fácil instalación • Curva de aprendizaje relativamente baja • Lenguage de comandos fácil de utilizar y aprender Thursday, May 31, 12
  • 9. Características Previsibilidad • La memoria es rápida, y permite a Redis tener un redimiento muy fiable • Operaciones sobre datasets de 10 mil claves tendrán el mismo rendimiento que sobre datasets de 50 millones de claves • La complejidad algorítmica de todos los comandos está documentada Thursday, May 31, 12
  • 10. Características Confiabilidad • Todos los datos residen en memoria, y son persistidos a disco eventualmente (snapshots, append-only log) • Replication system (master-slave) , pueden configurarse múltiples esclavos. Un esclavo puede ser el master de otro esclavo Thursday, May 31, 12
  • 11. Características Persistencia • RDB, Point-in-time snapshots en intervalos configurados • AOF (append-only file) cada operación de escritura • Es posible combinar RDB y AOF en la misma instancia • Se puede deshabilitar la persistencia del todo Thursday, May 31, 12
  • 12. Características Versatilidad • Adaptable a varios tipos de aplicaciones • Modelado de los datos a partir de estructuras de datos como listas, conjuntos, conjuntos ordenados y hashes Thursday, May 31, 12
  • 13. Tipos de datos • Redis NO es simplemente un motor de almacenamiento clave-valor • Es un servidor de estructuras de datos que incluye varios tipos de datos predefinidos (strings, lists, sets, sorted sets, hashes) Thursday, May 31, 12
  • 14. Tipos de datos Strings • Es el tipo de dato más simple • Si solamente usa este tipo de dato es similar a usar un servidor memcached pero con persistencia Thursday, May 31, 12
  • 15. Operaciones Strings • Comandos SET/GET para escribir/leer • Los valores pueden ser cualquier string no mayor que 1 GB • Si necesita almacenar algo más grande, Redis is NOT for you ;) Thursday, May 31, 12
  • 16. Tipos de datos Integers • Ideal para contadores atómicos INCR count > 1 INCR count > 2 INCRBY count 5 > 7 Thursday, May 31, 12
  • 17. Tipos de datos Lists • Secuencia de elementos ordenados • Uno de los tipos de datos más usados • Encaja perfectamente como estructura de datos ideal para resolver varios problemas Thursday, May 31, 12
  • 18. Tipos de datos Lists • Listas doblemente enlazadas garantizan la inserción en cualquier extremo en un tiempo constante O(1) • Con estas caterísticas puede usarse para modelar una “cola” Thursday, May 31, 12
  • 19. Operaciones Lists • LPUSH agrega un elemento en el extremo izquierdo de la lista • RPUSH en el extremo derecho • LRANGE extrae elementos de la lista en cierto rango Thursday, May 31, 12
  • 20. Operaciones Lists • LPUSH, RPUSH, LPOP, RPOP, ... • LINDEX, LINSERT, LLEN, ... • LTRIM, LREM, ... • http://redis.io/commands#list Thursday, May 31, 12
  • 21. Variantes “blocking” • BLPOP, BRPOP, BRPOPLPUSH • Bloquean la conexión (del cliente) cuando no hay elementos en la lista • Ideal para implementar colas de trabajos/ mensajes Thursday, May 31, 12
  • 22. Usos de las listas • Utilice listas cada vez que requiera acceder a los datos en el mismo orden en que se agregan • Ideal para casos en los que se requiere un ORDER BY de SQL • Escalable a millones de elementos manteniendo el mismo rendimiento Thursday, May 31, 12
  • 23. Ejemplos de uso de las listas • Mantener un listado cronológico de los comentarios publicados en un blog • Es posible paginar usando LRANGE de forma trivial $redis-cli RPOP post:123:comments c1 $redis-cli RPOP post:123:comments cn $redis-cli LRANGE post:123:comments 50 60 Thursday, May 31, 12
  • 24. Tipos de datos Sets • Colección NO–ordenada de datos (conjuntos) • Permite operaciones típicas sobre conjuntos como unión, intersección, diferencia, etc... • Estas operaciones son difíciles de implementar en un modelo relacional Thursday, May 31, 12
  • 25. Operaciones Sets • SADD, SREM, SCARD, SMEMBERS, SISMEMBER, ... • SUNION, SDIFF, SINTER, ... • SPOP, SRAND, .... O(1) • http://redis.io/commands#set Thursday, May 31, 12
  • 26. Tipos de datos Sorted Sets • Un conjunto ordenado es un conjunto donde a cada elemento se le asocia una puntuación (score) • Este valor (score) determina el orden de los elementos dentro del conjunto Thursday, May 31, 12
  • 27. Operaciones Sorted Sets • ZADD, ZREM, ZCARD, ZCOUNT, ZINCR, ... • ZSCORE, ZINCRBY, ZRANK, ... • ZCOUNT, .... • http://redis.io/commands#sorted_set Thursday, May 31, 12
  • 28. Tipos de datos Hashes • Permiten que objetos compuestos se almacenen en una clave específica • Tipo de dato ideal para almacenar objetos complejos en Redis, usando los atributos del objeto como claves del hash Thursday, May 31, 12
  • 29. Operaciones Hashes • HSET, HGET, HDEL, HEXIST, ... • HKEYS, HGETALL, HVALS, ... • HMGET, HMSET, ... • http://redis.io/commands#hash Thursday, May 31, 12
  • 30. Casos de uso Data caching Thursday, May 31, 12
  • 31. Data caching • Redis como motor primario de cache compartida • Compartir datos cacheados entre múltiples aplicaciones • Como un memcached pero persistente Thursday, May 31, 12
  • 32. Casos de uso Contadores Thursday, May 31, 12
  • 33. Contadores • Gran cantidad de escrituras/lecturas • Datos valiosos, pero NO críticos • No encajan en el modelo relacional • Insertar una fila en MySQL o actualizar un contador en cada petición será sin dudas difícil de escalar Thursday, May 31, 12
  • 34. Contadores $ INCR active:sports:spain > 0 $ INCR active:sports:spain > 2 $ INCR active:sports:italy > ... Thursday, May 31, 12
  • 35. Casos de uso Presencia ¿Quién está online? Thursday, May 31, 12
  • 36. Presencia • Mantener en un conjunto los usuarios que se han detectado online en cada minuto $ redis-cli SADD online:15:01 123 $ redis-cli SADD online:15:01 456 $ redis-cli SADD online:15:02 123 Thursday, May 31, 12
  • 37. Presencia • El conjunto de usuarios online se puede obtener de la UNION de los conjuntos relativos a los últimos ¿5? minutos. A las 15:05 $ redis-cli SUNION online:15:01 online:15:02 online:15:03 online: 15:04 online:15:05 1) 123 2) 345 Thursday, May 31, 12
  • 38. Presencia • El conjunto de “amigos” online de cierto usuario es otra operación sobre conjuntos redis-cli SINTER online:15:01 online:15:02 online:15:03 online:15:04 online:15:05 user:123:friends Thursday, May 31, 12
  • 39. Casos de uso Dymanic tracking Thursday, May 31, 12
  • 40. Dymamic Tracking • Queremos mantener un listado de las últimas 100 páginas visitadas en una web • ¿Qué están leyendo los usuarios ahora? • Mantenemos una lista y la limitamos a que tenga solo 100 elementos • Comparado a MongoDB capped collections Thursday, May 31, 12
  • 41. Dynamic Tracking LPUSH mylist somedata LTRIM mylist 0 99 Thursday, May 31, 12
  • 42. Casos de uso Tabla de posiciones Real time data sorting Thursday, May 31, 12
  • 43. Tabla de posiciones • Se necesita listar elementos ordenados por una puntuación • Las puntuaciones se actualizan en tiempo real • Consultas lentas por naturaleza SELECT * FROM ... WHERE ... ORDER BY ... LIMIT 10 Thursday, May 31, 12
  • 44. Tabla de posiciones • Mantener un conjunto ordenado (sorted set) con los elementos y su score $ redis-cli ZADD popular:sports 10 football $ redis-cli ZADD popular:sports 6 basketball $ redis-cli ZADD popular:sports 12 football $ redis-cli ZREVRANGE popular:sports 0 9 Thursday, May 31, 12
  • 45. Tabla de posiciones • Mantener un conjunto ordenado (sorted set) con los elementos y su score $ redis-cli ZADD popular:sports 10 football $ redis-cli ZADD popular:sports 6 basketball $ redis-cli ZADD popular:sports 12 football $ redis-cli ZREVRANGE popular:sports 0 9 Thursday, May 31, 12
  • 46. Casos de uso Logging Thursday, May 31, 12
  • 47. Loggin • Redis como motor de almacenamiento de logs • Escribimos logs en orden en una lista, y la limitamos a que tenga uan cierta cantidad de elementos Thursday, May 31, 12
  • 48. Casos de uso URL Routing Data dictionary Thursday, May 31, 12
  • 49. URL Routing • Convertir alias de URL a paths internos de la aplicación Ejemplo: http://www.apuestas.com/futbol => /sport/1 http://www.apuestas.com/futbol/espana/ Thursday, May 31, 12
  • 50. URL Routing • Convertir paths internos a friendly URLs Ejemplo: /sport/1 => http://www.apuestas.com/futbol /competition/3120 http://www.apuestas.com/futbol/espana/ copa-del-rey Thursday, May 31, 12
  • 51. URL Routing • Mantener un hash con el routing y otro con los alias redis-cli HSET routing /futbol /sport/1 redis-cli HSET alias /sport/1 /futbol Thursday, May 31, 12
  • 52. URL Generation Dictionary alias:example.com Path (internal) URL sport/1 /football article/1234 /news/football/very-nice-friendly-url user/345 /users/spain/el-fary Thursday, May 31, 12
  • 53. URL Matching Dictionary routes:example.com URL Path (internal) /football sport/1 /news/football/very-nice-friendly-url article/1234 /users/spain/el-fary user/345 Thursday, May 31, 12
  • 54. Integración con Symfony2 Thursday, May 31, 12
  • 55. Integración con Symfony2 • Construye tu propia integración • Usa algún bundle de 3ras partes • https://github.com/lessthan/LtRedisBundle • https://github.com/snc/SncRedisBundle Thursday, May 31, 12
  • 56. Clientes para PHP • Predis https://github.com/nrk/predis • PhpRedis https://github.com/nicolasff/phpredis Thursday, May 31, 12
  • 57. Predis https://github.com/nrk/predis • Escrito en PHP • Diferentes server profiles (versions) https://github.com/nrk/predis#main-features Thursday, May 31, 12
  • 58. PhpRedis https://github.com/nicolasff/phpredis • PHP Extension • Ligeramente más rápido • No sporta todas las versiones Thursday, May 31, 12
  • 59. Conexiones • Configuración de las conexiones a través de los archivos de configuración de la aplicación Thursday, May 31, 12
  • 60. Session storage • Redis como almacenamiento primario de sessiones de Symfony2 • Persistente • Rápido • Replicable • Escalable Thursday, May 31, 12
  • 61. Session storage RedisSessionHandler implementation Thursday, May 31, 12
  • 62. Session storage Configurando el handler de session Thursday, May 31, 12
  • 63. Session storage redis 127.0.0.1:6379> keys * 1) "sf2:session:pc5gsvnkap6q1ishmvf7lonba2" 2) "sf2:session:cv1dnt9aradi7c1ehbo12gp410" redis 127.0.0.1:6379> get sf2:session:pc5gsvnkap6q1ishmvf7lonba2 "_sf2_attributes|a:2:{s:4:"test";s:15:"testing session";s: 5:"test1";s:15:"testing session";}_sf2_flashes|a:2:{s: 7:"display";a:0:{}s:3:"new";a:0:{}}_sf2_meta|a:3:{s:1:"u";i: 1338469484;s:1:"c";i:1338469484;s:1:"l";s:1:"0";}" redis 127.0.0.1:6379> Thursday, May 31, 12
  • 64. Monolog handler • Redis como almacenamiento para logs • Muy útil cuando se necesita conservar logs para inspeccionar • El filesystem es muy lento • Fácil de leer desde otras aplicaciones (monitoreo) Thursday, May 31, 12
  • 65. Monolog handler • Se implementa un servicio que actúe como un custom Monolog Handler y utilice una lista de redis para almacenar los logs • Configuración Thursday, May 31, 12
  • 66. SwiftMailer spooling • Unsando una lista de Redis para hacer el mail spooling • La aplicación no ejecuta el envio de los correos durante ningún request • Los correos salientes son puestos en una cola • Otro proceso (en otro nodo, por ejemplo) se encarga de hacer el envio de los correos Thursday, May 31, 12
  • 67. Profiler storage • Agregado al HttpKernel Component en la 2.1 https://github.com/symfony/symfony/blob/ master/src/Symfony/Component/HttpKernel/ Profiler/RedisProfilerStorage.php • Usar como alternativa al SquileteProfilerStorage o al FileProfilerStorage Thursday, May 31, 12
  • 68. Doctrine Caching • Usado como almacenamiento primario para la cache de metadatos, resultados, y query de Doctrine • Alternativa al APC cache que se usa generalmente Thursday, May 31, 12
  • 69. Data Collector • LtRedisBundle implementa un DataCollector de los comandos enviados a Redis a través de su cliente Thursday, May 31, 12
  • 71. Dynamic Routing • Necesitamos convertir URLs amigables a rutas internas de Symfony2 • No queremos tener que hacer una consulta a una base de datos para generar cada URL amigables de una página (Ej. Doctrine Route) Thursday, May 31, 12