Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Meetup Madrid Redis Users: Introducción a Redis

Paradigma
November 13, 2015

Meetup Madrid Redis Users: Introducción a Redis

http://www.meetup.com/Madrid-RUG/

Redis es la base de datos más popular entre las clave-valor, la tercera entre las NoSQL y la décima en el ranking global tras las tradicionales Oracle, MySQL y SQL Server.

Es este meetup os proponemos una introducción y contamos con dos ponentes habituados a probar y usar Redis en multitud de casos de uso: Miguel Garrido y José Manuel Ferrer.

Más información: http://www.meetup.com/Madrid-RUG/events/226254272/

Paradigma

November 13, 2015
Tweet

More Decks by Paradigma

Other Decks in Technology

Transcript

  1. Introducción a Redis
    Introducción a Redis

    View Slide

  2. 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

    View Slide

  3. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Qué es Redis
    1

    View Slide

  4. 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

    View Slide

  5. 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.

    View Slide

  6. 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.

    View Slide

  7. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Claves y valores
    2

    View Slide

  8. 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

    View Slide

  9. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Estructuras de datos
    3

    View Slide

  10. 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

    View Slide

  11. 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 clave
    get characters:iron-man
    ● Incrementar un valor numérico de una clave
    incr counter
    incrby counter 10
    ● Decrementar un valor numérico de una clave
    decr counter
    decrby 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 30
    mget a b c
    3 Estructuras de datos / Strings

    View Slide

  12. 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 clave
    strlen 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 clave
    append characters:iron-man “next string”
    3 Estructuras de datos / Strings

    View Slide

  13. Introducción a Redis
    Operaciones básicas para tipos de datos comunes
    ● Conocer el tipo de un valor asociado a una clave
    type characters:iron-man
    >string
    ● Borrar una clave y su valor
    del characters:iron-man
    ● Saber si una clave existe
    exists characters:iron-man
    3 Estructuras de datos / Strings

    View Slide

  14. 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

    View Slide

  15. Introducción a Redis
    Operaciones básicas
    ● Añadir elementos a la cabeza (lpush) o a la cola (rpush) de una lista
    lpush 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 lista
    lrange avengers:members 0 -1 (el elemento -1 es el último elemento de una lista)
    ● Recortar los elementos de una lista
    ltrim 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

    View Slide

  16. 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

    View Slide

  17. Introducción a Redis
    Operaciones básicas
    ● Fijar un elemento en un hash con sus correspondientes campos
    hmset 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 hash
    hgetall avengers:iron-man
    ● Devolver las claves de un hash
    hkeys avengers:members
    ● Eliminar un campo de un hash
    hdel avengers:iron-man powerlevel
    ● Operar sobre un campo de un hash
    hincrby avengers:iron-man powerlevel 5
    3 Estructuras de datos / Hashes

    View Slide

  18. 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

    View Slide

  19. Introducción a Redis
    Operaciones básicas
    ● Añadir (sadd) o eliminar (srem) elementos a un set
    sadd avengers:members “Iron man” “Hulk” “Captain America”
    ● Ver los valores de un set
    smembers avengers:members
    ● Saber si un elemento se encuentra en un set
    sismember 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 set
    scard avengers:members
    3 Estructuras de datos / Sets

    View Slide

  20. 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

    View Slide

  21. 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 scores
    zremrangebyscore 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

    View Slide

  22. 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áficas
    zrangebylex avengers:members [B [L
    3 Estructuras de datos / Sorted sets

    View Slide

  23. 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 datos
    pfadd 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 nuevo
    pfmerge destination hll1 hll2 hll3
    3 Estructuras de datos / HyperLogLogs

    View Slide

  24. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Expiración del dato
    4

    View Slide

  25. 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

    View Slide

  26. 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 elimina
    expire 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 clave
    persist 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

    View Slide

  27. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Publicación y suscripción
    5

    View Slide

  28. 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

    View Slide

  29. 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

    View Slide

  30. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Persistencia
    6

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

  33. 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

    View Slide

  34. 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

    View Slide

  35. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Redis Sentinel
    7

    View Slide

  36. 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

    View Slide

  37. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    Redis Cluster
    8

    View Slide

  38. 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

    View Slide

  39. Implantación de Continuous Delivery en el Área Digital - Configuración y despliegue
    ¡Muchas gracias!

    View Slide