SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
Una introducción a Redis, un servidor de estructuras de datos en red que actua como una base de datos no-relacional con almacenamiento principal en memoria RAM y estrategias de almacenamiento persistente basadas en disco.
Una introducción a Redis, un servidor de estructuras de datos en red que actua como una base de datos no-relacional con almacenamiento principal en memoria RAM y estrategias de almacenamiento persistente basadas en disco.
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
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
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