Redis (1) -Introducción y características detalladas de Redis

Con el rápido desarrollo de Internet, los escenarios de aplicaciones de alta concurrencia y gran volumen de datos se están volviendo cada vez más comunes. Las bases de datos tradicionales de bases de datos ya no pueden respaldar directamente los requisitos comerciales. El sistema necesita aquellas con baja latencia y alta velocidad de procesamiento que puedan manejar flujos de datos., Y un sistema de almacenamiento de datos de administración de clústeres a gran escala fácil. En este momento, surgieron las bases de datos NoSQL. Generalmente tienen las ventajas de alto rendimiento, gran escalabilidad y alta disponibilidad. Redis es una de las más utilizadas.

¿Qué es Redis?

En el sitio web oficial de redis, podemos ver la siguiente breve introducción:

Redis es un almacén de estructura de datos en memoria de código abierto (con licencia BSD), que se utiliza como base de datos, caché y agente de mensajes. Redis proporciona estructuras de datos como cadenas, hashes, listas, conjuntos, conjuntos ordenados con consultas de rango, mapas de bits, hiperloglogs, índices geoespaciales y flujos. Redis tiene replicación incorporada, secuencias de comandos Lua, desalojo de LRU, transacciones y diferentes niveles de persistencia en el disco, y proporciona alta disponibilidad a través de Redis Sentinel y particionamiento automático con Redis Cluster.

Redis es un sistema de almacenamiento de estructura de datos basado en memoria de código abierto (licencia BSD) que se puede utilizar como base de datos, caché y agente de mensajes. Redis proporciona características como String, Hash, List, Set, sorted set, Bitmaps, hiperloglogs, índices geoespaciales y streams, estructura de datos, etc. Redis tiene replicación (replicación) incorporada, secuencias de comandos LUA (secuencias de comandos Lua), eventos controlados por LRU (desalojo de LRU), transacciones (transacciones) y diferentes niveles de persistencia de disco (persistencia), y a través de Sentinel y particionamiento automático (Cluster) para proporcionar alta Alta disponibilidad.

En resumen, Redis es un sistema de almacenamiento de datos no relacional, en memoria y de código abierto basado en kv (pares clave-valor).

1. Descripción general de las funciones de Redis

Como la base de datos NoSQL más popular del mercado, Redis tiene muchas ventajas. A continuación se muestra una descripción general de las características de Redis:

Operación de memoria pura, excelente rendimiento de lectura y escritura : implementación del lenguaje C, todos los datos se cargan en la memoria, la velocidad de ejecución es muy rápida, la velocidad de lectura de datos es 110,000 / sy la escritura de datos es 81,000 / s. (En la empresa del autor, una sola máquina redis tiene especificaciones 2C4G, y el tps generalmente se calcula como 20,000 tps / s);

Modelo de un solo proceso de un solo subproceso : la operación de un solo subproceso evita la sobrecarga de la conmutación de contexto de subproceso, y la E / S multiplexada sin bloqueo evita la sobrecarga de la espera de E / S, que también es una de las razones por las que Reids es rápido.

Soporte para la persistencia de datos : Redis basado en el almacenamiento de memoria proporciona dos estrategias de persistencia de datos (RDB y AOF), que pueden implementar fácilmente el almacenamiento de datos en el disco.

Atomicidad de la operación, transacción de soporte : todas las operaciones de Redis son atómicas y Redis también admite la ejecución atómica de varias operaciones combinadas.

Estructura de datos rica y no relacional : Redis es un sistema de almacenamiento de valor clave que admite múltiples estructuras de datos: listas, colecciones, colecciones ordenadas y tipos de datos hash.

Admite la replicación maestro-esclavo : a través de la replicación maestro-esclavo , varios servidores esclavos pueden tener la misma copia de base de datos que el servidor maestro. Puede leer y escribir por separado, de modo que el servidor maestro se dedica a escribir datos y el servidor esclavo se utiliza para leer datos. Una escritura y múltiples lecturas.

Logre una alta disponibilidad y distribución : proporciona una implementación de alta disponibilidad de Redis Sentinel, que puede garantizar la detección de fallas y la transferencia automática de fallas de los nodos de Redis. A partir de la versión 3.0, se proporciona oficialmente una implementación distribuida de Redis Cluster, una verdadera implementación distribuida de Redis, que proporciona alta disponibilidad, lectura-escritura y escalabilidad de capacidad.

Soporte para múltiples lenguajes de desarrollo : Redis admite múltiples lenguajes, como Lua, Ruby, Python, Twisted Python, PHP, Erlang, Tcl, Perl, Java, Scala, Clojure, etc.

A continuación, se combinan estas características para resolver algunos conocimientos comunes de Redis y ayudar a los lectores a comprender Redis más rápidamente.

1. ¿Por qué utilizar Redis?

Debido a que Redis es lo suficientemente rápido, la velocidad de lectura y escritura rápida significa "alto rendimiento" y adaptación natural a "alta concurrencia", y estos dos rendimientos son exactamente lo que necesita la Internet moderna.

2. ¿Por qué Redis es tan rápido?

1. Basadas completamente en la memoria, la mayoría de las solicitudes son operaciones de memoria pura, muy rápidas. Los datos se almacenan en la memoria, similar a HashMap. La ventaja de HashMap es que la complejidad temporal de la búsqueda y operación es O (1);

2. La estructura de datos es simple y la operación de datos también es simple La estructura de datos en Redis está especialmente diseñada;

3. Se utiliza un solo subproceso para evitar cambios de contexto innecesarios y condiciones de competencia. No hay cambios causados ​​por procesos múltiples o subprocesos múltiples para consumir CPU. No hay necesidad de considerar varios problemas de bloqueo. No hay operación de liberación de bloqueo. Rendimiento consumo por posible estancamiento;

4. Utilice el modelo de multiplexación de E / S múltiple, E / S sin bloqueo;

3. ¿Qué tipos de datos tiene Redis?

Redis tiene principalmente 5 tipos de datos, incluidos String, List, Set, Zset, Hash, que pueden cumplir con la mayoría de los requisitos de uso.

En segundo lugar, relacionado con la persistencia

3. ¿Por qué Redis necesita ser persistente?

Redis es una operación de memoria pura, entonces, ¿qué debo hacer si se corta la energía? Por lo tanto, se produce la persistencia de datos, es decir, los datos de la memoria se escriben en el disco para evitar que los datos de la memoria se pierdan cuando el servicio está inactivo.

4. ¿Cuál es el mecanismo de persistencia de Redis? ¿Sus ventajas y desventajas?

Redis proporciona dos mecanismos de persistencia RDB (predeterminado) y mecanismo AOF:

RDB: instantánea abreviada de Redis DataBase

RDB es el método de persistencia predeterminado de Redis. Los datos en la memoria se guardan en el disco duro en forma de instantánea de acuerdo con un cierto tiempo, y el archivo de datos correspondiente es dump.rdb. El período de la instantánea se define mediante el parámetro de guardar en el archivo de configuración.

Inserte la descripción de la imagen aquí

ventaja:

  • 1. Solo hay un archivo dump.rdb, que es conveniente para la persistencia.
  • 2. Buena tolerancia a desastres, un archivo se puede guardar en un disco seguro.
  • 3. Para maximizar el rendimiento, bifurque el proceso hijo para completar la operación de escritura y deje que el proceso principal continúe procesando comandos, de modo que IO se maximice. Utilice un proceso secundario separado para la persistencia, el proceso principal no realizará ninguna operación de IO, lo que garantiza el alto rendimiento de redis.
  • 4. En comparación con el gran conjunto de datos, es más eficiente comenzar que AOF.

Desventajas:

La seguridad de los datos es baja. RDB se conserva a intervalos. Si la redis falla entre la persistencia, se producirán pérdidas de datos. Por lo tanto, este método es más adecuado cuando los requisitos de datos no son rigurosos)

  • AOF: Persistencia

La persistencia AOF (es decir, la persistencia del archivo adjunto) consiste en registrar cada comando de escritura ejecutado por Redis en un archivo de registro separado (archivo aof) .Cuando se reinicia Redis, se restaurará el archivo en el registro persistente.

Cuando los dos métodos están habilitados al mismo tiempo, la recuperación de datos de Redis dará prioridad a la recuperación AOF.

Inserte la descripción de la imagen aquí

ventaja:

  • 1. La seguridad de los datos, aof persistencia se puede configurar con el atributo appendfsync, siempre, cada vez que se realiza una operación de comando, se registrará en el archivo aof una vez.
  • 2. Escriba archivos en modo adjuntar, incluso si el servidor está inactivo en el medio, puede usar la herramienta redis-check-aof para resolver el problema de consistencia de datos.
  • 3. El modo de reescritura del mecanismo AOF. Antes de que se reescriba el archivo AOF (cuando el archivo es demasiado grande, el comando se fusionará y se reescribirá), puede eliminar algunos de los comandos (como el flushall operado incorrectamente))

Desventajas:

  • 1. El archivo AOF es más grande que el archivo RDB y la velocidad de recuperación es más lenta.
  • 2. Cuando el conjunto de datos es grande, la eficiencia de inicio es menor que la de rdb.

para resumir

  • Los archivos AOF se actualizan con más frecuencia que RDB, y se prefiere AOF para restaurar datos.
  • AOF es más seguro y más grande que RDB
  • El rendimiento de RDB es mejor que AOF
  • Si ambos están equipados con carga prioritaria AO

5. ¿Cómo elegir un método de persistencia adecuado?

  • En términos generales, si desea lograr una seguridad de datos comparable a PostgreSQL, debe usar ambas funciones de persistencia. En este caso, cuando Redis se reinicia, primero cargará el archivo AOF para restaurar los datos originales, porque en circunstancias normales, el conjunto de datos guardado por el archivo AOF es más completo que el conjunto de datos guardado por el archivo RDB.
  • Si le preocupan mucho sus datos, pero aún puede soportar la pérdida de datos en unos minutos, entonces puede usar la persistencia RDB.
  • Muchos usuarios solo usan la persistencia AOF, pero este método no se recomienda, porque la instantánea RDB regular (instantánea) es muy conveniente para la copia de seguridad de la base de datos, y la velocidad del conjunto de datos de recuperación RDB es más rápida que la velocidad de recuperación AOF, excepto Además, el El uso de RDB también puede evitar errores en el programa AOF.
  • Si solo desea que sus datos existan mientras el servidor se está ejecutando, tampoco puede utilizar ningún método de persistencia.

En tercer lugar, la estrategia de eliminación de claves caducadas.

6. Estrategia de eliminación de claves caducadas de Redis

Todos sabemos que Redis es una base de datos de valores clave y podemos establecer el tiempo de vencimiento de la clave almacenada en caché en Redis. La estrategia de caducidad de Redis se refiere a cómo Redis maneja cuando caduca la clave almacenada en caché en Redis.

Por lo general, existen tres tipos de estrategias de vencimiento:

  • Vencimiento programado: cada clave que establece el tiempo de vencimiento debe crear un temporizador, y se borrará inmediatamente después del tiempo de vencimiento. Esta estrategia puede borrar inmediatamente los datos caducados, lo cual es muy amigable con la memoria; pero tomará muchos recursos de la CPU para procesar los datos caducados, lo que afectará el tiempo de respuesta y el rendimiento de la caché.

  • Caducidad diferida: solo cuando se accede a una clave, se juzgará si la clave ha caducado y se borrará si caduca. Esta estrategia puede maximizar el ahorro de recursos de la CPU, pero es muy poco amigable con la memoria. En casos extremos, es posible que no se pueda volver a acceder a una gran cantidad de claves caducadas, por lo que no se borrarán y ocuparán mucha memoria.

  • Caducidad periódica: a intervalos regulares, se analizará una cierta cantidad de claves en el diccionario de caducidad de una determinada cantidad de bases de datos y se borrarán las claves caducadas. Esta estrategia es un compromiso entre los dos primeros. Al ajustar el intervalo de tiempo de la exploración de tiempo y el límite de tiempo de cada exploración, la CPU y los recursos de memoria se pueden equilibrar de manera óptima en diferentes circunstancias.

    (El diccionario de caducidad guardará los datos de tiempo de caducidad de todas las claves con el tiempo de caducidad establecido, donde la clave es un puntero a una clave en el espacio de claves y el valor es el tiempo de caducidad representado por la marca de tiempo de UNIX con precisión de milisegundos de la clave. Clave space Se refiere a todas las claves almacenadas en el clúster de Redis).

En Redis se utilizan dos estrategias de caducidad, caducidad perezosa y caducidad periódica al mismo tiempo.

Extensión: ¿Cómo establecer el tiempo de vencimiento y la validez permanente de la clave de Redis?

Comandos EXPIRE y PERSIST.

7. ¿Qué sucede si se agota el espacio de memoria de Redis?

1. Si se alcanza el límite superior, el comando de escritura de Redis devolverá un mensaje de error (pero el comando de lectura también puede regresar normalmente).

2. Si el mecanismo de eliminación de memoria está configurado , el contenido antiguo se eliminará cuando Redis alcance el límite de memoria.

8. ¿Cuáles son las estrategias de eliminación de memoria de Redis?

La estrategia de eliminación de memoria de Redis se refiere a cómo tratar los datos que deben escribirse nuevamente y deben solicitar espacio adicional cuando la memoria de Redis para el almacenamiento en caché es insuficiente.

A diferencia de la versión anterior, redis5.0 nos proporciona ocho estrategias diferentes de reemplazo de memoria. Hace mucho tiempo que se proporcionaron seis tipos.

Eliminación selectiva del espacio de claves que establece el tiempo de caducidad:

(1) Volatile-lru: Seleccione los datos usados ​​menos recientemente del conjunto de datos con el tiempo de vencimiento establecido y elimínelos.
(2) Volatile-ttl: seleccione los datos a caducar del conjunto de datos con el tiempo de caducidad establecido.
(3) Volátil-aleatorio: seleccione arbitrariamente los datos que se eliminarán del conjunto de datos que ha establecido el tiempo de vencimiento.
(4) Volatile-lfu: seleccione los datos utilizados con menos frecuencia del conjunto de datos con el tiempo de vencimiento establecido y elimínelos.

Eliminación selectiva global del espacio de claves

(5) allkeys-lru: seleccione los datos usados ​​menos recientemente del conjunto de datos para eliminar
(6) allkeys-lfu: seleccione los datos usados ​​menos frecuentemente del conjunto de datos para eliminar.
(7) allkeys-random: selecciona arbitrariamente datos del conjunto de datos (server.db [i] .dict) para eliminar
(8) no-enviction (desalojo): prohíbe el desalojo de datos, que también es la estrategia predeterminada. Esto significa que cuando la memoria no es suficiente para acomodar los nuevos datos, la nueva operación de escritura reportará un error, la solicitud puede continuar y la tarea en línea no puede continuar.
Inserte la descripción de la imagen aquí

9. Realización del mecanismo de eliminación

1. Elimine la clave primaria inválida
Dado que se elimina, debe eliminar los datos y guardar la nueva. Hay dos métodos principales para que Redis elimine una clave primaria no válida:
(1) De forma pasiva, si se descubre que la clave principal no es válida cuando se accede a ella, se eliminará. Redis llamará expireIfNeeded cuando implemente GET, MGET, HGET, LRANGE y otros comandos que involucren la lectura de datos. El significado de su existencia es verificar si es inválido antes de leer los datos y eliminarlo si falla.
(2) Vía activa, que detecta y elimina periódicamente cuando se encuentran fallas. La desventaja del método negativo es que si no se accede a la clave durante mucho tiempo, ocupará mucho espacio en la memoria, por lo que existe un método positivo.
(3) Eliminación activa: cuando la memoria excede el límite máximo de memoria, se activa una estrategia de limpieza activa. La estrategia está determinada por la configuración de los parámetros de inicio. El
tiempo de caducidad específico de la clave principal se mantiene en la tabla de caducidad del diccionario:

Inserte la descripción de la imagen aquí

Cuatro, escenarios de aplicación de Redis

1. Contador

Puede realizar operaciones de auto-incremento y auto-decremento en String para realizar la función de contador. El rendimiento de lectura y escritura de una base de datos en memoria como Redis es muy alto y es adecuado para almacenar recuentos frecuentes de lectura y escritura. Utilice esta función para generar una identificación única a nivel mundial.

2. Caché

Coloque los datos calientes en la memoria, establezca el uso máximo de memoria y la estrategia de eliminación para garantizar la tasa de aciertos de la caché.

3. Implementación de bloqueos distribuidos

En un escenario distribuido, los bloqueos en un entorno independiente no se pueden utilizar para sincronizar procesos en varios nodos. Puede usar el comando SETNX que viene con Redis para implementar bloqueos distribuidos. Además, también puede usar los bloqueos distribuidos oficiales de RedLock.

4. Cola de mensajes (función de publicación / suscripción)

List es una lista doblemente enlazada, y los mensajes se pueden escribir y leer a través de lpush y rpop. Sin embargo, es mejor utilizar middleware de mensajería como Kafka y RabbitMQ.

5. Tabla de búsqueda

Por ejemplo, los registros DNS son muy adecuados para el almacenamiento mediante Redis. La tabla de búsqueda es similar a la caché, pero también utiliza la función de búsqueda rápida de Redis. Sin embargo, el contenido de la tabla de búsqueda no se puede invalidar y el contenido almacenado en caché se puede invalidar porque la caché no es una fuente confiable de datos.

Cinco, tipos de datos comunes de Redis

Redis tiene principalmente 5 tipos de datos, incluidos String, List, Set, Zset, Hash, que pueden cumplir con la mayoría de los requisitos de uso.

tipo de datos Valor almacenable operando Escenarios de aplicación
Cuerda Cadena, entero, punto flotante Opere toda la cadena o parte de ella;
aumente y disminuya el logaritmo
Almacenamiento en caché de valores-clave
Lista Lista Empujar y hacer estallar elementos en primer lugar;
operar en algunos elementos
Almacene la estructura de datos fenotípicos en la lista de artículos
Picadillo Tabla hash desordenada que contiene pares clave-valor Agregar, obtener y eliminar un solo par clave-valor;
obtener todos los pares clave-valor;
verificar si existe una clave
Objeto estructurado, como una entidad
Colocar Colección desordenada Agregar, obtener y eliminar un solo elemento;
verificar si el elemento existe;
calcular la intersección, la unión y el conjunto de diferencias;
obtener elementos al azar del conjunto
Operaciones de intersección, unión y diferencia
ZSet Conjunto ordenado Agregue, obtenga y elimine un solo elemento; obtenga el elemento de
acuerdo con el rango de puntuación o miembro para
calcular la clasificación de una clave
Eliminación y clasificación

Supongo que te gusta

Origin blog.csdn.net/weixin_43828467/article/details/112336353
Recomendado
Clasificación