01 Redis
Redis es una base de datos remota en memoria, que no solo tiene un rendimiento sólido, sino que también tiene características de replicación y un modelo de datos único para resolver problemas. Redis proporciona 5 tipos diferentes de estructuras de datos, y varios problemas pueden asignarse naturalmente a estas estructuras de datos. A través de la replicación, la persistencia, el fragmentación del lado del cliente y otras características, los usuarios pueden expandir fácilmente Redis en un sistema que puede contener cientos de GB de datos y procesar millones de solicitudes por segundo.
1.1 Introducción a Redis
Redis es una base de datos no relacional muy rápida (base de datos no relacional). Puede almacenar asignaciones entre claves y 5 tipos diferentes de valores. Puede almacenar claves almacenadas en la memoria. Los datos de pares de valores se conservan en el disco duro, y las características se pueden copiar para ampliar el rendimiento de lectura, y el fragmentación del lado del cliente también se puede utilizar para ampliar el rendimiento de escritura.
Redis frente a otras bases de datos o software
En comparación con la asociación de dos tablas en una base de datos relacional, Redis no usa tablas, y su base de datos no predefinirá ni forzará a los usuarios a asociar datos diferentes en Redis;
El servidor de caché de valor clave de alto rendimiento memcached a menudo se compara con Redis:
- Ambos pueden usarse para almacenar mapas de valores clave, y su rendimiento es casi el mismo;
- Pero Redis puede escribir datos automáticamente en el disco de dos maneras diferentes;
- Además de almacenar claves de cadena ordinarias, Redis también puede almacenar otras cuatro estructuras de datos, mientras que memcached solo puede almacenar claves de cadena ordinarias.
Estas diferencias permiten que Redis se use para resolver una gama más amplia de problemas, y puede usarse tanto como una base de datos primaria (base de datos primaria) como una base de datos auxiliar para otros sistemas de almacenamiento (base de datos auxiliar).
En general, muchos usuarios solo usarán Redis cuando sea necesario el rendimiento o la funcionalidad de Redis. Los lectores deben decidir si usar Redis de acuerdo con sus propias necesidades, y considerar si usar Redis como almacenamiento primario o almacenamiento auxiliar, y cómo garantizar la integridad de los datos a través de medios como la replicación, la persistencia y las transacciones.
El nombre | Tipo | Opciones de almacenamiento de datos | Tipo de consulta | Funciones adicionales |
---|---|---|---|---|
Redis | Base de datos no relacional usando en memoria | Cadenas, listas, colecciones, tablas hash, colecciones ordenadas | Cada tipo tiene su propio comando exclusivo, además de la operación masiva (operación parcial) y el soporte de transacciones parciales (parciales) | Publicación y suscripción, replicación maestro / esclavo (replicación maestro / esclavo), persistencia, script (procedimiento almacenado, procedimiento almacenado) |
Memcached | Almacenamiento en caché de valores clave mediante almacenamiento de memoria | Mapeo clave-valor | Crear comando, leer comando, actualizar comando, eliminar comando y varios otros comandos | Servidor multiproceso para mejorar el rendimiento |
Mysql | Base de datos relacional | Cada base de datos puede contener múltiples tablas de datos, cada tabla puede contener múltiples filas; puede manejar vistas de múltiples tablas; admite espacio y expansión de terceros | SELECCIONAR, ACTUALIZAR, INSERTAR, ELIMINAR, función, procedimiento almacenado | Admite la naturaleza ACID (requiere InnoDB), replicación maestro-esclavo y replicación maestro-maestro |
MongoDB | Almacenamiento de documentos no relacionales utilizando almacenamiento en disco | Cada base de datos puede contener múltiples tablas, y cada tabla puede contener múltiples documentos BSON sin esquema | Crear comando, leer comando, actualizar comando, eliminar comando, comando de consulta condicional, etc. | Admite operaciones de reducción de mapas, replicación maestro-esclavo, fragmentación, índice espacial |
Características adicionales
Resistencia:
Cuando se usa una base de datos en memoria como Redis, uno de los primeros problemas a considerar es "¿A dónde irán los datos almacenados por el servidor cuando el servidor se apague?"
Redis tiene dos métodos diferentes de persistencia: pueden escribir datos almacenados en la memoria en el disco duro en un formato pequeño y compacto.
El primer tipo es el volcado de punto en el tiempo. La operación de volcado se puede realizar cuando se cumple la condición de que "se cumple el número especificado de operaciones de escritura dentro de un período de tiempo especificado", o llamando a dos Cualquiera de los comandos de disco duro descargados para ejecutar;
El segundo método de persistencia escribe todos los comandos modificados de la base de datos en un archivo de solo agregado.Los usuarios pueden configurar la escritura de solo agregar para que nunca se sincronice, se sincronice una vez por segundo o escriba cada vez según la importancia de los datos. Sincronice una vez cuando ingrese un comando.
Replicación maestro-esclavo:
Además, aunque Redis tiene un buen rendimiento, está limitado por el diseño de almacenamiento de memoria y, a veces, un servidor Redis puede no ser capaz de procesar todas las solicitudes. Para ampliar el rendimiento de lectura de Redis y proporcionar soporte de conmutación por error para Redis, Redis implementa la función de replicación maestro-esclavo.
Replicación maestro-esclavo: el servidor esclavo que realiza la replicación se conectará al servidor maestro y aceptará la copia de toda la base de datos enviada por el servidor maestro; luego, los comandos de escritura ejecutados por el servidor maestro se enviarán a todos los servidores esclavos conectados para su ejecución, actualizando así en tiempo real El conjunto de datos del servidor. Debido a que los datos contenidos en el servidor esclavo se actualizan continuamente, el cliente puede enviar una solicitud de lectura a cualquier servidor esclavo para evitar el acceso centralizado al servidor maestro.
Razones para usar Redis
- El método adoptado por Memcached para eliminar elementos es ocultar los elementos en la lista a través del mecanismo de la lista negra (lista negra), evitando así las operaciones de lectura, actualización y escritura de elementos. Por el contrario, Redis LIST y SET permiten a los usuarios agregar directamente o Eliminar el elemento.
- El uso de Redis no solo hace que el código sea más conciso, más fácil de entender y más fácil de mantener, sino que también hace que el código se ejecute más rápido (porque los usuarios no necesitan leer la base de datos para actualizar los datos). Además, Redis es mucho más eficiente y fácil de usar que las bases de datos relacionales.
- La base de datos es una operación muy lenta para actualizar las filas en la tabla. Además de causar una lectura aleatoria, también causará una escritura aleatoria. En Redis, los usuarios pueden usar directamente el comando atómico INCR y sus variantes para calcular los datos agregados, y debido a que Redis almacena datos en la memoria, y la solicitud enviada a los comandos de Redis no necesita pasar por el analizador de consultas clásico y el optimizador de consultas Procesamiento, por lo que la velocidad de realizar escrituras aleatorias en los datos almacenados por Redis es muy rápida.
- Además, debido a que Redis no es una base de datos relacional u otra base de datos de almacenamiento en disco duro, puede evitar escribir datos temporales innecesarios y evitar el problema de escanear o eliminar datos temporales y, en última instancia, mejorar el rendimiento del programa.
1.2 Introducción a la estructura de datos de Redis
Redis puede almacenar asignaciones entre claves y 5 tipos diferentes de estructura de datos, a saber, cadena, lista, conjunto, hash y zset. Algunos comandos son comunes a estas cinco estructuras de datos, como del, type, rename, etc., pero también hay algunos comandos de Redis que solo se pueden usar para una o dos estructuras.
Tipo de estructura | Estructura de valor almacenado | Estructura de alfabetización |
---|---|---|
cuerda | Cadena, número entero, coma flotante | Realice operaciones en cadenas enteras o partes de cadenas; realice operaciones de incremento o decremento en enteros y números de punto flotante |
lista | Una lista vinculada, cada nodo en la lista vinculada contiene una cadena | Empuje o extraiga elementos de ambos extremos de la lista vinculada; recorte la lista vinculada de acuerdo con el desplazamiento; lea elementos únicos o múltiples; encuentre o elimine elementos basados en valores |
conjunto | Un recopilador desordenado que contiene cadenas, y cada cadena que se incluye es única y diferente. | Agregue, obtenga y elimine elementos individuales; verifique si existe un elemento en el conjunto; calcule la intersección, la unión y la diferencia. Obtenga elementos al azar de la colección. |
picadillo | Tabla hash desordenada que contiene pares clave-valor | Agregue, obtenga y elimine un solo par clave-valor; obtenga todos los pares clave-valor |
simbólico | Mapeo ordenado entre miembros de cadena y puntajes de punto flotante, el orden de los elementos está determinado por el tamaño del puntaje | Agregue, obtenga y elimine elementos individuales; obtenga elementos basados en el rango de puntuación o miembros |
Nota:
- Lo siguiente usará el entorno simple de Redis creado por Docker, y usará redis-cli para una interacción de comando simple. El proceso de inicio de Docker Redis se muestra en el apéndice al final de este artículo.
- Las siguientes son las operaciones más simples de las cinco estructuras de datos.
Cadena en Redis
Comando | Comportamiento |
---|---|
obtener | Obtenga el valor almacenado en la clave |
conjunto | Establecer el valor almacenado en la clave |
del | Eliminar el valor almacenado en la clave dada |
Lista en Redis
Una estructura de lista puede almacenar múltiples cadenas en orden.
Comando | Comportamiento |
---|---|
rpush | Empuje el valor especificado al extremo derecho de la lista, el comando devuelve la longitud actual de la lista |
lrange | Obtenga todos los valores de la lista en el rango dado. Use 0 como índice inicial y -1 como índice final para extraer todos los elementos |
lindex | Extraer un solo elemento de acuerdo con el índice |
lpop | Pop un valor del extremo izquierdo de la lista y devuelve el valor emergente |
Ubicado en Redis
Tanto las colecciones como las listas de Redis pueden almacenar múltiples cadenas. La diferencia entre ellas es que las listas pueden almacenar múltiples cadenas idénticas, mientras que las colecciones usan tablas hash para garantizar que cada cadena que almacenan sea diferente. Lo mismo (estas tablas hash tienen solo claves y ningún valor asociado con las claves).
Comando | Comportamiento |
---|---|
triste | Agrega el elemento especificado a la colección |
huele | Devuelve todos los elementos contenidos en la colección. |
sismember | Comprueba si el valor dado existe en la colección |
srem | Si el elemento dado existe en la colección, elimine el elemento |
Además de las operaciones básicas de adición y eliminación, los conjuntos también admiten muchas otras operaciones, como sinterización, luz solar y sdiff. Estos tres comandos pueden realizar operaciones de intersección, operaciones de unión y operaciones de diferencia, respectivamente.
Operación básica:
Tabla hash hash en Redis
Los hash de Redis pueden almacenar asignaciones entre múltiples pares clave-valor. El valor almacenado en el hash puede ser una cadena o un número, y los usuarios también pueden aumentar y disminuir sus valores numéricos.
Hashing es similar a una versión en miniatura de Redis en muchos sentidos.
Comando | Comportamiento |
---|---|
hget | Obtener el valor de la clave hash especificada |
hset | Asociar un par clave-valor dado en el hash |
hgetall | Obtenga todos los pares clave-valor contenidos en el hash |
hdel | Si la clave dada existe en el hash, elimine la clave |
Operación básica:
Colección ordenada zset en Redis
Al igual que los hashes ordenados, los conjuntos ordenados se utilizan para almacenar pares clave-valor:
Las claves de un conjunto ordenado se denominan miembros (menber), y cada miembro es diferente;
El valor de un conjunto ordenado se denomina puntuación, que debe ser un número de coma flotante.
Una colección ordenada es la única estructura en Redis que puede acceder a elementos basados en miembros, y también puede acceder a elementos basados en puntajes y el orden en que se organizan los puntajes.
Comando | Comportamiento |
---|---|
zadd | Agregar un miembro con una puntuación dada a una colección ordenada |
Zrange | Según la posición del elemento en el conjunto ordenado, obtenga múltiples elementos del conjunto ordenado |
zrangebyscore | Obtenga todos los elementos de una colección ordenada dentro de una puntuación determinada |
zrem | Si un miembro determinado existe en un conjunto ordenado, elimínelo |
Operación básica:
1.3 Resumen simple
Redis es una herramienta que se puede utilizar para resolver problemas. , Tiene una estructura de datos que otras bases de datos no tienen, y almacenamiento de memoria (lo que hace que Redis sea muy rápido), remoto (que le permite a Redis conectarse con múltiples clientes y servidores) y persistencia (que le permite al servidor Después de reiniciar, se mantienen los datos antes de reiniciar) y la escalabilidad (a través de replicación y fragmentación maestro-esclavo) y otras características, lo que permite a los usuarios crear soluciones a diferentes problemas de una manera familiar.
Cambio de pensamiento:
"Cómo agrupar mis ideas en las tablas y filas de la base de datos" cambiará a: "Qué estructura de datos de Redis se utiliza para resolver este problema es mejor".