SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
Servidor de estructuras de datos básicas (NoSQL)


                                          Antonio Ognio
                                            @gnrfan




Saturday, March 24, 12
•   ReDIS = Remote Dictionary Server

                     •   Diccionario ~= Array de PHP, Objeto Javascript, etc

                     •   Servidor de sockets TCP/IP (Puerto 6379 - Prot. texto plano)

                     •   Escrito en C (23+ Kloc)

                     •   Fácil compilación e instalación (pocas dependencias)

                     •   Programado para entornos UNIX (Linux, BSD, Mac OS X)

                     •   Empaquetado para mayoría de distribuciones



Saturday, March 24, 12
•   Creado en Sicilia (Italia) por Salvatore Sanfilippo

                     •   Iniciado a principios del 2009

                     •   Licencia BSD (Código abierto)

                     •   Desarrollado inicialmente para LLOOGG

                     •   Co-desarrollado por Pieter Noordhuis (Holanda)

                     •   Sponsoring de VMware



Saturday, March 24, 12
Tipos de datos
                • Cadenas de texto
                • Listas
                • Conjuntos
                • Conjuntos ordenados
                • Hashes (Diccionarios)
                • Canales (Pub/Sub)
Saturday, March 24, 12
API




                         http://redis.io/commands
Saturday, March 24, 12
API
            $ redis-cli   zadd hackers 1940 "Alan Kay"
            (integer) 1
            $ redis-cli   zadd hackers 1953 "Richard Stallman"
            (integer) 1
            $ redis-cli   zadd hackers 1965 "Yukihiro Matsumoto"
            (integer) 1
            $ redis-cli   zadd hackers 1916 "Claude Shannon"
            (integer) 1
            $ redis-cli   zadd hackers 1969 "Linus Torvalds"
            (integer) 1
            $ redis-cli   zadd hackers 1912 "Alan Turing"
            (integer) 1




Saturday, March 24, 12
API
             $ redis-cli zrange hackers 0 -1
             1. Alan Turing
             2. Claude Shannon
             3. Alan Kay
             4. Richard Stallman
             5. Yukihiro Matsumoto
             6. Linus Torvalds

             $ redis-cli zrevrange hackers 0 -1
             1. Linus Torvalds
             2. Yukihiro Matsumoto
             3. Richard Stallman
             4. Alan Kay
             5. Claude Shannon
             6. Alan Turing



Saturday, March 24, 12
Persistencia
                • El conjunto de datos debe entrar en la RAM
                • Snapshots en disco cada cierto tiempo
                     •   Ventana de tiempo configurable

                     •   Compacto (en uso de disco)

                • Append-only file (AOF)
                     •   Registra cada cambio en tiempo real

                     •   Usa más espacio de disco pero puede ser compactado


Saturday, March 24, 12
Librerías cliente
                • Existentes para virtualmente cualquier
                         lenguaje popular de la actualidad
                • En muchos casos más de una librería
                         disponible
                • Algunas de ellas:                 http://redis.io/clients
                           •   redis-py (Python)     •   hiredis (C)

                           •   redis-rb (Ruby)       •   ObjCHiredis (Objective-C)

                           •   Jedis (Java)          •   redis_node (Node.js)

Saturday, March 24, 12
Clustering
                •        Por el momento soporta
                         replicación master-slave

                     •    Librerías cliente implementan
                          sharding

                     •    Algoritmo de consistent
                          hashing

                •        Redis Cluster

                     •    Rama de Redis en desarrollo
                          activo

                     •    Se basa en el concepto de
                          “slots” o “virtual buckets”
Saturday, March 24, 12
Comunidad
                •        Early-adopters en las comunidades de Ruby y Python
                         principalmente

                •        Muy popular con las startups

                •        Meetup groups (San Francisco, Londres)

                •        Seguir a @antirez en Twitter y buscar el hashtag
                         #redis

                •        Canal IRC muy activo y amigable:
                                   #redis en Freenode.net
Saturday, March 24, 12
Comparativa
                   • MySQL (o cualquier otra base SQL)
                         •   El almacenamiento principal es en disco, la RAM se usa
                             como caché - Redis toma el camino opuesto

                         •   El parsing de SQL es un cuello de botella

                             •   Por eso les conviene usar Prepared Statements

                         •   El modelo relacional y el lenguaje SQL es mucho más
                             flexible si no se conoce de antemano el uso que se le va
                             a dar a los datos



Saturday, March 24, 12
Comparativa
                   • Memcached
                         •   Muy popular en sitios web grandes

                         •   No soporta persistencia directamente

                             •   Existe memcachedb como un proyecto aparte

                         •   Solo permite almacenar cadenas o BLOBs

                         •   Estrategia de expiración basada en tiempo (TTL)

                         •   No soporta clustering directamente

                             •   Las librerías deben implementar una estrategia como
                                 round robin o consistent hashing.
Saturday, March 24, 12
Modelamiento

                   • ¿Cómo modelamos un blog?
                         •   ID de post (un contador)

                         •   Datos de cada post (un hash)

                         •   Tags de cada post (un conjunto)

                         •   Listado de posts ordenados por fecha (un sorted set)

                         •   Posts por meses, posts por tags, etc (más sorted sets)

            https://bitbucket.org/nosqldemos/redis-blog-demo
Saturday, March 24, 12
Código de ejemplo

                   • Lamer News (un clone de Reddit)
                         •   Escrito por Salvatore, el autor de Redis

                         •   Código bastante simple usando Sinatra (Ruby)

                         •   Demuestra el uso de Redis como base de datos
                             principal

                         •   Hay un port en Python en Github

                                     http://lamernews.com/

Saturday, March 24, 12
Ideas de uso


                         •   Contadores rápidos para sitios web

                         •   Colas de trabajos (Ej. Resque de Github)

                         •   Lista de últimos usuarios que han visitado un portal

                         •   Caché de objetos más visitados (Ej. Noticias de la portada)

                         •   Servidor de chat usando canales (pub/sub)


                                   http://rediscookbook.com/

Saturday, March 24, 12
Estrategias de despliegue



                         •   YouPorn, uno de los sitios con más tráfico de Internet depende
                             de Redis para indexar y servir su contenido

                         •   Uso extensivo de Sorted Sets para cada tag o listado de videos
                             independiente

                         •   Decenas de servidores Redis en replicación master-

                         •   Redis resultó más rápido que las tarjetas de red que tenían,
                             tuvieron que cambiarlas

                         •   Aún se guardan los datos en MySQL para regenerar conjuntos

              http://mundogeek.net/archivos/2012/02/16/el-porno-prefiere-redis/
Saturday, March 24, 12
Ej. Modelamiento YouPorn



                                 videos:filters:released

                           videos:filters:orientation:​straight

                         videos:filters:categories:{​category_id}

                                 videos:ordering:rating


               https://groups.google.com/forum/#!topic/redis-db/d4QcWV0p-YM
Saturday, March 24, 12
Conclusiones
               •         Servidor de estructuras de datos básicas en red
                         (listas, conjuntos, diccionarios, contadores)

               •         Aplicable virtualmente a cualquier sitio web ya
                         existente como parte de una estrategia de caché
                         o acelaración

               •         Exige un tipo de modelamiento orientado al
                         dominio del problema que ofrece un alto
                         rendimiento a la hora de hacer consultas pero no
                         es flexible como estrategia de almacenamiento a
                         largo plazo
Saturday, March 24, 12

Weitere ähnliche Inhalte

Was ist angesagt? (20)

Nosql y cassandra
Nosql y cassandraNosql y cassandra
Nosql y cassandra
 
Introducción a Apache HBase
Introducción a Apache HBaseIntroducción a Apache HBase
Introducción a Apache HBase
 
Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?
 
Bd nosql clave valor
Bd nosql clave valorBd nosql clave valor
Bd nosql clave valor
 
Presentacion BD NoSQL
Presentacion  BD NoSQLPresentacion  BD NoSQL
Presentacion BD NoSQL
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDB
 
Mysql cluster
Mysql clusterMysql cluster
Mysql cluster
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
 
Manual apache cassandra y comandos en la shell
Manual apache cassandra y comandos en la shellManual apache cassandra y comandos en la shell
Manual apache cassandra y comandos en la shell
 
"Cloudificación" de servicios: retos y oportunidades
"Cloudificación" de servicios: retos y oportunidades"Cloudificación" de servicios: retos y oportunidades
"Cloudificación" de servicios: retos y oportunidades
 
Optimización del rendimiento web
Optimización del rendimiento webOptimización del rendimiento web
Optimización del rendimiento web
 
Couch db
Couch dbCouch db
Couch db
 
Arquitectura Multitenant en Oracle 12c
Arquitectura Multitenant en Oracle 12cArquitectura Multitenant en Oracle 12c
Arquitectura Multitenant en Oracle 12c
 
Practica Apache 3 mod dav
Practica Apache 3 mod davPractica Apache 3 mod dav
Practica Apache 3 mod dav
 
SqueakDBX
SqueakDBXSqueakDBX
SqueakDBX
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Curso mysql modificado
Curso mysql modificadoCurso mysql modificado
Curso mysql modificado
 
Apache3 mod dav
Apache3 mod davApache3 mod dav
Apache3 mod dav
 
Apli t1 practicas_apache
Apli t1 practicas_apacheApli t1 practicas_apache
Apli t1 practicas_apache
 
Practica3apache
Practica3apachePractica3apache
Practica3apache
 

Ähnlich wie Redis: servidor de estructuras de datos

Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrolloJuan Ladetto
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Ronny López
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datosOtoniel Hernandez
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datosomar5544
 
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
 
Plataforma de desarrollo
Plataforma de desarrolloPlataforma de desarrollo
Plataforma de desarrolloosvaldo molina
 
Introducción a Redis y Azure Redis Cache en Net Core 2.2
Introducción a Redis y Azure Redis Cache en Net Core 2.2Introducción a Redis y Azure Redis Cache en Net Core 2.2
Introducción a Redis y Azure Redis Cache en Net Core 2.2Jorge Jeffrey Vargas Ipince
 
Construyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDISConstruyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDISGonzalo Chacaltana
 
OpenSolaris para la comunidad educativa
OpenSolaris para la comunidad educativaOpenSolaris para la comunidad educativa
OpenSolaris para la comunidad educativaIban Nieto Castillero
 
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQLGestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQLJuan Percy Rojas Cruz
 

Ähnlich wie Redis: servidor de estructuras de datos (20)

Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
NoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de DatosNoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de Datos
 
Introducción al Ruby
Introducción al RubyIntroducción al Ruby
Introducción al Ruby
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
MongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercadoMongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercado
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datos
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datos
 
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
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
SGNext Elasticsearch
SGNext ElasticsearchSGNext Elasticsearch
SGNext Elasticsearch
 
RoR y eLearning 2.0
RoR y eLearning 2.0RoR y eLearning 2.0
RoR y eLearning 2.0
 
Act4 bd teo
Act4 bd teoAct4 bd teo
Act4 bd teo
 
Plataforma de desarrollo
Plataforma de desarrolloPlataforma de desarrollo
Plataforma de desarrollo
 
Introducción a Redis y Azure Redis Cache en Net Core 2.2
Introducción a Redis y Azure Redis Cache en Net Core 2.2Introducción a Redis y Azure Redis Cache en Net Core 2.2
Introducción a Redis y Azure Redis Cache en Net Core 2.2
 
Sistemas de g base de datos
Sistemas de g base de datosSistemas de g base de datos
Sistemas de g base de datos
 
Sistemas de Gestion de Base de Datos
Sistemas de Gestion de Base de DatosSistemas de Gestion de Base de Datos
Sistemas de Gestion de Base de Datos
 
Construyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDISConstruyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDIS
 
OpenSolaris para la comunidad educativa
OpenSolaris para la comunidad educativaOpenSolaris para la comunidad educativa
OpenSolaris para la comunidad educativa
 
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQLGestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
 

Mehr von Antonio Ognio

Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Antonio Ognio
 
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?Antonio Ognio
 
Organizando una Hackparty
Organizando una HackpartyOrganizando una Hackparty
Organizando una HackpartyAntonio Ognio
 
Lenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo webLenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo webAntonio Ognio
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Antonio Ognio
 
Desarrollando con PHP en Windows
Desarrollando con PHP en WindowsDesarrollando con PHP en Windows
Desarrollando con PHP en WindowsAntonio Ognio
 
Gestor de paquetes YUM
Gestor de paquetes YUMGestor de paquetes YUM
Gestor de paquetes YUMAntonio Ognio
 
Mejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - HardeningMejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - HardeningAntonio Ognio
 
Mini-tutorial de git
Mini-tutorial de gitMini-tutorial de git
Mini-tutorial de gitAntonio Ognio
 
¿Porqué Python? ...y Django
¿Porqué Python? ...y Django¿Porqué Python? ...y Django
¿Porqué Python? ...y DjangoAntonio Ognio
 
Ubuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty JackalopeUbuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty JackalopeAntonio Ognio
 
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/LinuxConsejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/LinuxAntonio Ognio
 

Mehr von Antonio Ognio (16)

Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
 
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
 
Organizando una Hackparty
Organizando una HackpartyOrganizando una Hackparty
Organizando una Hackparty
 
Lean Startups
Lean StartupsLean Startups
Lean Startups
 
Lenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo webLenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo web
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
 
Desarrollando con PHP en Windows
Desarrollando con PHP en WindowsDesarrollando con PHP en Windows
Desarrollando con PHP en Windows
 
Gestor de paquetes YUM
Gestor de paquetes YUMGestor de paquetes YUM
Gestor de paquetes YUM
 
Twixer (english)
Twixer (english)Twixer (english)
Twixer (english)
 
Twixer
TwixerTwixer
Twixer
 
Mejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - HardeningMejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - Hardening
 
Mini-tutorial de git
Mini-tutorial de gitMini-tutorial de git
Mini-tutorial de git
 
¿Porqué Python? ...y Django
¿Porqué Python? ...y Django¿Porqué Python? ...y Django
¿Porqué Python? ...y Django
 
Ubuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty JackalopeUbuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty Jackalope
 
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/LinuxConsejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
 
REPLs
REPLsREPLs
REPLs
 

Redis: servidor de estructuras de datos

  • 1. Servidor de estructuras de datos básicas (NoSQL) Antonio Ognio @gnrfan Saturday, March 24, 12
  • 2. ReDIS = Remote Dictionary Server • Diccionario ~= Array de PHP, Objeto Javascript, etc • Servidor de sockets TCP/IP (Puerto 6379 - Prot. texto plano) • Escrito en C (23+ Kloc) • Fácil compilación e instalación (pocas dependencias) • Programado para entornos UNIX (Linux, BSD, Mac OS X) • Empaquetado para mayoría de distribuciones Saturday, March 24, 12
  • 3. Creado en Sicilia (Italia) por Salvatore Sanfilippo • Iniciado a principios del 2009 • Licencia BSD (Código abierto) • Desarrollado inicialmente para LLOOGG • Co-desarrollado por Pieter Noordhuis (Holanda) • Sponsoring de VMware Saturday, March 24, 12
  • 4. Tipos de datos • Cadenas de texto • Listas • Conjuntos • Conjuntos ordenados • Hashes (Diccionarios) • Canales (Pub/Sub) Saturday, March 24, 12
  • 5. API http://redis.io/commands Saturday, March 24, 12
  • 6. API $ redis-cli zadd hackers 1940 "Alan Kay" (integer) 1 $ redis-cli zadd hackers 1953 "Richard Stallman" (integer) 1 $ redis-cli zadd hackers 1965 "Yukihiro Matsumoto" (integer) 1 $ redis-cli zadd hackers 1916 "Claude Shannon" (integer) 1 $ redis-cli zadd hackers 1969 "Linus Torvalds" (integer) 1 $ redis-cli zadd hackers 1912 "Alan Turing" (integer) 1 Saturday, March 24, 12
  • 7. API $ redis-cli zrange hackers 0 -1 1. Alan Turing 2. Claude Shannon 3. Alan Kay 4. Richard Stallman 5. Yukihiro Matsumoto 6. Linus Torvalds $ redis-cli zrevrange hackers 0 -1 1. Linus Torvalds 2. Yukihiro Matsumoto 3. Richard Stallman 4. Alan Kay 5. Claude Shannon 6. Alan Turing Saturday, March 24, 12
  • 8. Persistencia • El conjunto de datos debe entrar en la RAM • Snapshots en disco cada cierto tiempo • Ventana de tiempo configurable • Compacto (en uso de disco) • Append-only file (AOF) • Registra cada cambio en tiempo real • Usa más espacio de disco pero puede ser compactado Saturday, March 24, 12
  • 9. Librerías cliente • Existentes para virtualmente cualquier lenguaje popular de la actualidad • En muchos casos más de una librería disponible • Algunas de ellas: http://redis.io/clients • redis-py (Python) • hiredis (C) • redis-rb (Ruby) • ObjCHiredis (Objective-C) • Jedis (Java) • redis_node (Node.js) Saturday, March 24, 12
  • 10. Clustering • Por el momento soporta replicación master-slave • Librerías cliente implementan sharding • Algoritmo de consistent hashing • Redis Cluster • Rama de Redis en desarrollo activo • Se basa en el concepto de “slots” o “virtual buckets” Saturday, March 24, 12
  • 11. Comunidad • Early-adopters en las comunidades de Ruby y Python principalmente • Muy popular con las startups • Meetup groups (San Francisco, Londres) • Seguir a @antirez en Twitter y buscar el hashtag #redis • Canal IRC muy activo y amigable: #redis en Freenode.net Saturday, March 24, 12
  • 12. Comparativa • MySQL (o cualquier otra base SQL) • El almacenamiento principal es en disco, la RAM se usa como caché - Redis toma el camino opuesto • El parsing de SQL es un cuello de botella • Por eso les conviene usar Prepared Statements • El modelo relacional y el lenguaje SQL es mucho más flexible si no se conoce de antemano el uso que se le va a dar a los datos Saturday, March 24, 12
  • 13. Comparativa • Memcached • Muy popular en sitios web grandes • No soporta persistencia directamente • Existe memcachedb como un proyecto aparte • Solo permite almacenar cadenas o BLOBs • Estrategia de expiración basada en tiempo (TTL) • No soporta clustering directamente • Las librerías deben implementar una estrategia como round robin o consistent hashing. Saturday, March 24, 12
  • 14. Modelamiento • ¿Cómo modelamos un blog? • ID de post (un contador) • Datos de cada post (un hash) • Tags de cada post (un conjunto) • Listado de posts ordenados por fecha (un sorted set) • Posts por meses, posts por tags, etc (más sorted sets) https://bitbucket.org/nosqldemos/redis-blog-demo Saturday, March 24, 12
  • 15. Código de ejemplo • Lamer News (un clone de Reddit) • Escrito por Salvatore, el autor de Redis • Código bastante simple usando Sinatra (Ruby) • Demuestra el uso de Redis como base de datos principal • Hay un port en Python en Github http://lamernews.com/ Saturday, March 24, 12
  • 16. Ideas de uso • Contadores rápidos para sitios web • Colas de trabajos (Ej. Resque de Github) • Lista de últimos usuarios que han visitado un portal • Caché de objetos más visitados (Ej. Noticias de la portada) • Servidor de chat usando canales (pub/sub) http://rediscookbook.com/ Saturday, March 24, 12
  • 17. Estrategias de despliegue • YouPorn, uno de los sitios con más tráfico de Internet depende de Redis para indexar y servir su contenido • Uso extensivo de Sorted Sets para cada tag o listado de videos independiente • Decenas de servidores Redis en replicación master- • Redis resultó más rápido que las tarjetas de red que tenían, tuvieron que cambiarlas • Aún se guardan los datos en MySQL para regenerar conjuntos http://mundogeek.net/archivos/2012/02/16/el-porno-prefiere-redis/ Saturday, March 24, 12
  • 18. Ej. Modelamiento YouPorn videos:filters:released videos:filters:orientation:​straight videos:filters:categories:{​category_id} videos:ordering:rating https://groups.google.com/forum/#!topic/redis-db/d4QcWV0p-YM Saturday, March 24, 12
  • 19. Conclusiones • Servidor de estructuras de datos básicas en red (listas, conjuntos, diccionarios, contadores) • Aplicable virtualmente a cualquier sitio web ya existente como parte de una estrategia de caché o acelaración • Exige un tipo de modelamiento orientado al dominio del problema que ofrece un alto rendimiento a la hora de hacer consultas pero no es flexible como estrategia de almacenamiento a largo plazo Saturday, March 24, 12