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 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
  2. 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
  3. 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.
  4. 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.
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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