meetup madrid redis users: introducción a redis

39
Introducción a Redis Introducción a Redis

Upload: paradigma-digital

Post on 14-Apr-2017

3.261 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Introducción a Redis

Page 2: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

1. Qué es Redis

2. Claves y valores

3. Estructuras de datos

4. Expiración del dato

5. Publicación y suscripción

6. Persistencia

7. Redis Sentinel

8. Redis Cluster

Índice

Page 3: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Qué es Redis1

Page 4: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Qué es Redis

● Se define como un almacén de estructuras de datos en memoria, usado como base de datos clave/valor NoSQL, caché y

broker de mensajería.

● Aunque la información se almacena en memoria dispone de mecanismos de persistencia en disco.

● En versiones anteriores hacía uso de memoria virtual, pero ahora está deprecado.

● Redis da soporte a casos de uso concretos. No es una base de datos “para todo”.

1 Qué es Redis / Qué es Redis

Page 5: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

1 Qué es Redis / Ventajas

Ventajas

● Base de datos con alto rendimiento.

● Diferentes estrategias de persistencia que proporcionan diferentes soluciones a diferentes problemas.

● Permite transaccionalidad de operaciones.

● Provee mecanismos de publicación y suscripción.

● Proporciona pipelines de comandos para minimizar los accesos al servidor.

Page 6: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

1 Qué es Redis / Incovenientes

Inconvenientes

● Al ser un almacén de datos en memoria, el consumo de RAM es elevado.

● No es recomendable almacenar grandes archivos multimedia, por ejemplo.

● Baja relacionalidad de los datos, con lo que no es óptima para cualquier solución. Por ejemplo, las consultas están limitadas

a un acceso clave / valor.

● Redis no soporta auto-compresión, pero el programador puede hacerla para rebajar el consumo de RAM penalizando el

rendimiento.

Page 7: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Claves y valores2

Page 8: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Claves

Las claves en Redis pueden ser cualquier secuencia binaria, desde una cadena de texto hasta el contenido de un fichero. La cadena

vacía es un valor válido.

Algunas reglas sobre claves:

● Las claves no deben ser demasiado largas, no sólo por el consumo de memoria y ancho de banda sino por el coste de

comparar claves demasiado extensas para operar sobre ellas.

● Las claves deben ser descriptivas, siempre es mejor “user:10:comments” que “u10c”.

● Hay que intentar seguir un esquema en el nombrado de claves. Por ejemplo "object-type:id" es buena idea, sería "user:

1000". Puntos y “-” normalmente se usan para campos con multi-palabra, por ejemplo "comment:1234:reply.to" o

"comment:1234:reply-to".

● El tamaño máximo de una clave es 512 MB.

2 Claves y valores / Claves

Page 9: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Estructuras de datos3

Page 10: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Strings

● Los strings son las estructuras de datos más básicos de Redis.

● Se puede almacenar información binaria en un campo de tipo String y operar con ella.

● Se puede usar para cachear fragmentos de HTML o páginas completas.

● El tamaño máximo de un valor de un campo String en Redis no puede superar los 512 MB.

En resumen, podemos usar los strings para almacenar y recuperar información como sesiones de usuario, carritos de la compra, contadores, cache de HTML, cache de consultas a BBDD o llamadas a un API, y en general objetos serializados en XML, JSON o cualquier otro formato.

3 Estructuras de datos / Strings

Page 11: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Fijar un valor en una clave (admite argumentos “nx” para que falle si la clave existe o “xx” que sólo tiene éxito si existe)set characters:iron-man '{"name": "Iron man", "real-name": "Tony Stark", "powerlevel": 85}'

● Obtener el valor de una claveget characters:iron-man

● Incrementar un valor numérico de una claveincr counterincrby counter 10

● Decrementar un valor numérico de una clavedecr counterdecrby counter 2

● Fijar o devolver varios valores de claves a la vez. Mget devuelve un array. Es útil para reducir accesos a Redis.mset a 10 b 20 c 30mget a b c

3 Estructuras de datos / Strings

Page 12: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Fijar un valor y devolver como resultado el que tenía antes de cambiarlo.getset a 30>10

● Saber el tamaño del valor asociado a una clavestrlen characters:iron-man>65

● Devolver un substring del valor de una clave getrange characters:iron-man 2 10

● Concatenar un string a un valor de una claveappend characters:iron-man “next string”

3 Estructuras de datos / Strings

Page 13: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas para tipos de datos comunes

● Conocer el tipo de un valor asociado a una clavetype characters:iron-man>string

● Borrar una clave y su valordel characters:iron-man

● Saber si una clave existeexists characters:iron-man

3 Estructuras de datos / Strings

Page 14: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Listas

● Las listas son simplemente una secuencia de elementos ordenados.

● Las listas en Redis están implementadas como Listas enlazadas, lo que hace que añadir nuevos elementos sea igual para listas pequeñas o enormes.

● Como contrapartida, acceder a un elemento por índice hace que sea más costoso en rendimiento, para esto usaremos Sorted Sets.

● Los casos de uso más claros para utilizar listas son: “Mostar los últimos 10 comentarios”, Un proceso añade tareas a una lista mientras otro las va extrayendo y ejecutando...etc

3 Estructuras de datos / Listas

Page 15: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Añadir elementos a la cabeza (lpush) o a la cola (rpush) de una listalpush avengers:members “Iron man”

● Extraer elementos de la cabeza (rpop) o de la cola (rpop) de una lista

lpop avengers:members

● Devolver un rango de elementos de una listalrange avengers:members 0 -1 (el elemento -1 es el último elemento de una lista)

● Recortar los elementos de una listaltrim avengers:members 0 2

● Notificar a un proceso cuando un elemento es insertado en la cabeza (blpop) o en la cola (brpop) de una lista o devolver valor en caso de que la lista siga vacía dado un timeout. Muy útil en colas para evitar hacer polling contra una lista.brpop avengers:members 5

● Devolver y eliminar el último elemento de una lista (source) y añadirlo como primero a otra (destination)rpoplpush source destination

3 Estructuras de datos / Listas

Page 16: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Hashes

● En muchos aspectos, los hashes son como los strings, pero añadiendo un nuevo nivel: el campo.

● La ventaja principal para usar hashes es que podemos extraer, actualizar y borrar partes de nuestro campo sin tener que hacerlo con el campo completo.

3 Estructuras de datos / Hashes

Page 17: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Fijar un elemento en un hash con sus correspondientes camposhmset avengers:iron-man name “Iron man” powerlevel 85

● Extraer campos de un hash

hmget avengers:iron-man powerlevel> 85

● Devolver todos los campos y sus valores de un hashhgetall avengers:iron-man

● Devolver las claves de un hashhkeys avengers:members

● Eliminar un campo de un hashhdel avengers:iron-man powerlevel

● Operar sobre un campo de un hashhincrby avengers:iron-man powerlevel 5

3 Estructuras de datos / Hashes

Page 18: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Sets

● Los sets son conjuntos no ordenados de strings.

● Nunca se pueden repetir elementos en un set

3 Estructuras de datos / Sets

Page 19: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Añadir (sadd) o eliminar (srem) elementos a un setsadd avengers:members “Iron man” “Hulk” “Captain America”

● Ver los valores de un set

smembers avengers:members

● Saber si un elemento se encuentra en un setsismember avengers:members “Black widow”

● Operaciones de unión (sunion o sunionstore), intersección (sinter o sinterstore) o diferencias(sdiff o sdiffstore) entre sets.sinter avengers:members x-men:members

● Extraer un elemento aleatorio de un set (spop) o devolverlo sin eliminarlo del set (srandmember)spop avengers:members

● Saber el número de elementos de un setscard avengers:members

3 Estructuras de datos / Sets

Page 20: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Sorted Sets

● Los sorted sets son sets con posibilidad de ser ordenados

● Cada elemento en un sorted set está asociado a un float denominado score

● Dados dos elementos A y B con scores diferentes, A > B si A.score > B.score

● Dados dos elementos A y B con scores iguales, A > B si el string A es lexicográficamente > string B.

● Los sorted sets permiten operar basándose en el scope

● Desde la versión 2.8, Redis permite obtener rangos basados en reglas lexicográficas

3 Estructuras de datos / Sorted sets

Page 21: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Añadir (zadd) o eliminar (zrem) elementos a un sorted set con parámetros adicionales, como sólo añadirlo si el elemento ya existe (XX) o no permitir actualizar existentes sino añadir nuevos (NX)zadd avengers:members 1 “Iron man” 2 “Hulk” 3 “Captain America”

● Ver los valores de un sorted set dado un rango determinado ordenado ascendente (zrange) o descendentemente

(zrevrange)zrange avengers:members 0 -1 -withscores (para obtener sus scores)

● Devolver un subconjunto de elementos basándose en scores ordenado ascendente (zrangebayscore) o descendentemente(zrevrangebyscore)zrangebyscore avengers:members -inf 2

● Eliminar elementos basándose en scoreszremrangebyscore avengers:members 2 3

● Obtener la posición de un elemento en un sorted set ordenado ascendente (zrank) o descendentemente (zrevrank)zrank avengers:members “Iron man”

3 Estructuras de datos / Sorted sets

Page 22: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas con reglas lexicográficas

● Obtener el rango de elementos ordenados ascendente (zrangebylex) o descendentemente (zrevrangebylex) siguiendo reglas lexicográficaszrangebylex avengers:members [B [L

3 Estructuras de datos / Sorted sets

Page 23: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

HyperLogLogs

● Algoritmo para calcular el número de entradas distintas en un conjunto dado.

Operaciones

● Añadir a un HLL una estructura de datospfadd avengers:members “Iron man” “Hulk” “Captain America”

● Contar los distintos valores introducidos en el HLL

pfcount avengers:members> 3

● Mezclar múltiples HLLs en uno nuevopfmerge destination hll1 hll2 hll3

3 Estructuras de datos / HyperLogLogs

Page 24: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Expiración del dato4

Page 25: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Conceptos básicos

● Redis permite marcar una clave para que expire. Se puede notificar con un tiempo absoluto (segundos desde 1 de Enero de 1970) o con un tiempo para que la clave se mantenga viva (en segundos o milisegundos).

● Es una operación basada en la clave, con lo que es independiente del tipo de estructura de datos que utilicemos

● Es una herramienta muy poderosa a la hora de implementar sistemas de caché basados en Redis

4 Expiración del dato

Page 26: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Fijar expiración en segundos (expire) o milisegundos (pexpire) de una clave ya existente, una vez pasado ese tiempo, la clave se eliminaexpire avengers:iron-man 10

● Fijar expiración de una clave en un determinado momento y eliminarla una vez llegado a ese momento

expireat avengers iron-man 1356933600

● Comprobar el Time To Live de una clave en segundos (ttl) o en milisegundos (pttl)ttl avengers iron-man

● Eliminar la expiración de una clavepersist avengers:iron-man

● Obtener la posición de un elemento en un sorted set ordenado ascendente (zrank) o descendentemente (zrevrank)zrank avengers:members “Iron man”

4 Expiración del dato

Page 27: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Publicación y suscripción5

Page 28: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Conceptos básicos

● Redis proporciona soporte para la publicación y suscripción a canales.

● Permite la suscripción a varios canales

● Permite la suscripción a un patrón de canales, por ejemplo, suscribirse a todos aquellos que comiencen por un string determinado

● Permite la desuscripción de uno o varios canales

5 Publicación y suscripción

Page 29: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Operaciones básicas

● Suscribirse (subscribe) o desuscribirse (unsubscribe) a varios canales.subscribe avengers:notifications avengers:warnings

● Suscribirse (psubscribe) o desuscribirse (punsubscribe) a canales que cumplan unas condiciones

psubscribe avengers:*

● Publicar un mensaje en un canal. Devuelve el número de suscriptores que recibieron el mensaje.publish avengers:notifications “Avengers assemble”>3

5 Publicación y suscripción

Page 30: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Persistencia6

Page 31: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Conceptos básicos

● Redis permite la persistencia de su información en disco

● El mecanismo RDB va haciendo snapshots de nuestro conjunto de datos en intervalos que nosotros definimos

● El mecanimos AOF escribe cada operación recibida por el servidor, de modo que en cada inicio del servidor podemos reconstruir el conjunto de datos original

● Estos mecanismos se pueden combinar, haciendo que, en caso de reinicio del servidor, la estrategia AOF reconstruya el conjunto de datos original

● Redis permite deshabilitar la persistencia por completo, haciendo que el conjunto de datos exista sólo mientras el servidor está ejecutándose

6 Persistencia

Page 32: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Ventajas

● Es la estrategia adecuada en caso de querer hacer backups de nuestros datos

● Es muy bueno en caso de recuperación tras un desastre

● Maximiza el rendimiento de Redis, ya que el proceso padre sólo tiene que lanzar un hijo para que persista esta información, de modo que nunca el proceso padre de Redis tendrá que ejecutar operaciones de E/S

● Permite una recuperación del conjunto de datos más rápida que AOF en caso de desastre

Inconvenientes

● No es buena en caso de querer minimizar la pérdida de datos en caso de desastre ya que se definen save points y la pérdida de servicio puede ser entre alguno de ellos

● Si el conjunto de datos es muy grande, el lanzamiento del proceso hijo que ejecuta las operaciones de E/S puede ser demasiado costoso y desembocar en pérdida de servicio a clientes de algunos milisegundos o incluso en segundos si el conjunto de datos es enorme y el rendimiento de la CPU es bajo

6 Persistencia / RDB

Page 33: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Ventajas

● Favorece la durabilidad de la información. Definiendo las políticas de sincronización con el fichero puede ser tan eficiente como RDB

● El fichero donde se guardan las operaciones se abre en modo append, así no se penaliza la búsqueda dentro del mismo y no hay riesgo de corrupción

● Cuando el fichero se hace demasiado grande, Redis permite la creación de nuevos ficheros y el cambio de agujas para escribir sobre este nuevo fichero de forma silenciosa y eficiente.

● Permite que tengamos guardadas todas las operaciones que se han realizado sobre el servidor

Inconvenientes

● Los ficheros son habitualmente más grandes que sus equivalentes en RDB para el mismo conjunto de datos

● AOF puede ser más lento que RDB dependiendo de la política de sincronización que se escoja

6 Persistencia / AOF

Page 34: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Qué estrategia usar

La indicación que Redis nos hace es que utilicemos ambas para mantener un nivel de seguridad en el dato similiar al que nos ofrece, por ejemplo, PostGreSQL.

En caso de que nuestros datos no sean tan importantes como para poder permitirnos una pérdida de minutos en el servicio, se recomienda el uso de RDB sólamente, ya que ofrece mayor rendimiento.

6 Persistencia / Qué estrategia usar

Page 35: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Redis Sentinel7

Page 36: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Conceptos básicos

● Redis permite la persistencia de su información en disco

● El mecanismo RDB va haciendo snapshots de nuestro conjunto de datos en intervalos que nosotros definimos

● El mecanimos AOF escribe cada operación recibida por el servidor, de modo que en cada inicio del servidor podemos reconstruir el conjunto de datos original

● Estos mecanismos se pueden combinar, haciendo que, en caso de reinicio del servidor, la estrategia AOF reconstruya el conjunto de datos original

● Redis permite deshabilitar la persistencia por completo, haciendo que el conjunto de datos exista sólo mientras el servidor está ejecutándose

6 Persistencia

Page 37: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

Redis Cluster8

Page 38: Meetup Madrid Redis Users: Introducción a Redis

Introducción a Redis

Conceptos básicos

● Redis permite la persistencia de su información en disco

● El mecanismo RDB va haciendo snapshots de nuestro conjunto de datos en intervalos que nosotros definimos

● El mecanimos AOF escribe cada operación recibida por el servidor, de modo que en cada inicio del servidor podemos reconstruir el conjunto de datos original

● Estos mecanismos se pueden combinar, haciendo que, en caso de reinicio del servidor, la estrategia AOF reconstruya el conjunto de datos original

● Redis permite deshabilitar la persistencia por completo, haciendo que el conjunto de datos exista sólo mientras el servidor está ejecutándose

6 Persistencia

Page 39: Meetup Madrid Redis Users: Introducción a Redis

Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue

¡Muchas gracias!