Una pregunta del alma: Ya que hay un Mapa, ¿por qué necesitamos Redis?

1. También es un caché, ¿no puedes usar un mapa?

  1. Redis puede almacenar docenas de gigabytes de datos, ¿puede funcionar Map?
  2. El caché de Redis se puede conservar localmente, ¿puede funcionar el mapa?
  3. Redis se puede usar como caché distribuida y Map solo se puede almacenar en caché en la misma JVM;
  4. Redis admite millones de simultaneidades por segundo, ¿puede funcionar Map?
  5. Redis tiene un mecanismo de caducidad, ¿lo tiene Map?
  6. Redis tiene una API rica y es compatible con muchos escenarios de aplicaciones. ¿Está bien Map?

2. ¿Por qué Redis es de subproceso único?

  1. El código es más claro y la lógica de procesamiento es más simple;
  2. No hay necesidad de considerar varios problemas de bloqueo, no hay operación de bloqueo y liberación de bloqueos, y no hay problemas de rendimiento causados ​​por posibles interbloqueos;
  3. No hay conmutación de subprocesos múltiples para consumir CPU;
  4. No puede aprovechar las CPU multinúcleo, pero se puede mejorar abriendo varias instancias de Redis más;

3. ¿Redis es realmente de un solo subproceso?

  1. Antes de Redis 6.0, era de subproceso único y, después de Redis 6.0, comenzó a admitir subprocesos múltiples;
  2. Redis utiliza internamente varios servicios basados ​​en epoll y también puede implementar varios servidores Redis para resolver el problema de un solo subproceso;
  3. Los principales cuellos de botella de rendimiento de Redis son la memoria y la red;
  4. La memoria es fácil de decir, solo agregue una tarjeta de memoria, pero la red es un gran problema, por lo que la memoria Redis6 es fácil de decir, solo agregue una tarjeta de memoria;
  5. La red es el gran problema, por lo que Redis6.0 introduce el concepto de subprocesos múltiples,
  6. Redis 6.0 introduce subprocesos múltiples en el procesamiento de E/S de red, como lectura y escritura de datos de red y análisis de protocolos. Cabe señalar que el módulo principal para ejecutar comandos sigue siendo de un solo subproceso.

Cuarto, las ventajas y desventajas de Redis.

1. Ventajas

  1. Redis es una base de datos KV, MySQL es una base de datos relacional y Redis es más rápida;
  2. Las operaciones de datos de Redis se realizan principalmente en la memoria, MySQL almacena principalmente datos en el disco duro y Redis es más rápido;
  3. Redis también es compatible con la persistencia (RDB+AOF) Redis admite la persistencia asíncrona de los datos en la memoria en el disco duro para evitar el problema de pérdida de datos causado por el tiempo de inactividad de Redis;
  4. Redis tiene un rendimiento extremadamente alto, con una velocidad de lectura de 110 000 veces/s y una velocidad de escritura de 81 000 veces/s;
  5. Redis tiene tipos de datos enriquecidos, no solo admite pares clave-valor KV, sino que también admite el almacenamiento de estructuras de datos como list, set, zset y hash;
  6. Redis admite la copia de seguridad de datos, es decir, la copia de seguridad de datos en modo maestro-esclavo;
  7. Redis admite transacciones simples y la operación satisface la atomicidad;
  8. Redis admite la separación de lectura y escritura para compartir la presión de la lectura;
  9. Redis admite el modo centinela para realizar la transferencia automática de fallas;
  10. La operación de un solo subproceso evita el cambio frecuente de contexto;
  11. Adopta un mecanismo de multiplexación de E/S sin bloqueo con un rendimiento excelente;

2. Desventajas

  1. Los datos se almacenan en la memoria, que es fácil de causar la pérdida de datos;
  2. La capacidad de almacenamiento está limitada por la memoria y solo se puede almacenar una pequeña cantidad de datos de uso común;
  3. Problemas de consistencia de escritura doble de caché y base de datos;
  4. Cuando se usa para el almacenamiento en caché, es probable que ocurran problemas como la penetración de la memoria, la ruptura del caché y la avalancha del caché;
  5. Después de modificar el archivo de configuración, debe reiniciarse para sincronizar los datos del disco duro con la memoria, lo que lleva mucho tiempo y Redis no puede proporcionar servicios durante el tiempo de sincronización de datos;

Cinco, escenarios comerciales comunes de Redis

  1. Redis es una base de datos nosql basada en memoria, que se puede conservar en forma de nuevos subprocesos sin afectar las operaciones de lectura y escritura de un solo subproceso de Redis.
  2. Obtenga los últimos N datos a través de la lista
  3. Simule el escenario donde el tiempo de vencimiento debe establecerse como token
  4. Publicar Suscribirse Sistema de mensajería
  5. temporizador, contador
  6. Aceleración de caché, sesiones distribuidas, tablas de clasificación, contadores distribuidos, bloqueos distribuidos;
  7. Redis admite transacciones, persistencia, secuencias de comandos LUA, publicación/suscripción, eliminación de caché, tecnología de transmisión y otras características;

Seis, tipos de datos comunes de Redis

1, cuerda

(1) Introducción a la cadena

La cadena es la estructura clave-valor más básica, la clave es un identificador único y el valor es un valor específico. De hecho, el valor no es solo una cadena, sino también un número (entero o número de punto flotante). La longitud máxima de datos que el valor que puede contener es 512M.

(2) Escenarios de aplicación

① Como base de datos de caché

En el sistema de administración de Java, la mayoría de ellos usan MySQL para almacenar datos y Redis como caché. Debido a que Redis tiene las características de admitir alta concurrencia, generalmente puede acelerar la lectura y escritura y reducir la presión sobre el servidor de la base de datos. La mayoría de las solicitudes se solicitará primero Redis, si no hay datos en Redis, solicite la base de datos MySQL y luego almacene en caché en Redis para el próximo uso.

② Contador

Hay un comando en la cadena Redis INCR key. El comando incr realizará una operación de incremento automático en el valor. Por ejemplo, la lectura de artículos CSDN y el volumen de reproducción de videos se pueden contar a través de Redis. Cada lectura será +1, y estos datos se almacenarán de forma asíncrona en la base de datos MySQL, reduzca la presión de escritura en el servidor MySQL.

③ sesión compartida

En un sistema distribuido, los usuarios suelen acceder a diferentes servidores cada vez que solicitan, lo que generará el problema de la asincronía de la sesión. En este momento, generalmente se usa Redis para resolver este problema, y ​​la sesión se almacena en Redis. Solo sáquelo. .

④ Bloqueo distribuido

  1. valor clave setnx, bloqueo
  2. del llave, suelta la cerradura

(3) comando de operación clave

(4) establecer valor clave

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

  1. EX segundos, establecer el tiempo de caducidad, en segundos
  2. PX milisegundos, establezca el tiempo de caducidad en milisegundos
  3. Marca de tiempo EXAT-segundos, establezca el tiempo de caducidad, marca de tiempo UNIX en segundos
  4. Marca de tiempo PXAT en milisegundos, tiempo de caducidad establecido, marca de tiempo UNIX en milisegundos
  5. NX, establece el valor de la clave cuando la clave no existe
  6. XX, establece el valor de la clave cuando la clave existe
  7. KEEPTTL, mantiene el tiempo de vida de la clave especificada antes de configurar
  8. GET, devuelve el valor original de la clave especificada, o nil si la clave no existe

Observación:

Los comandos no distinguen entre mayúsculas y minúsculas, mientras que las claves distinguen entre mayúsculas y minúsculas.

help @类型: Ver los comandos de operación relacionados con el tipo actual.

Dado que las opciones del comando SET pueden reemplazar a SETNX, SETEX, PSETEX, GETSET, es posible que en futuras versiones de Redis estos comandos queden en desuso y finalmente se eliminen。

(5) Establecer múltiples valores clave al mismo tiempo

(6) Obtener el valor dentro del rango especificado

obtener rango, establecer rango

(7) Aumento o disminución del valor

  1. Tecla INCR, incrementa el número
  2. Incremento de la tecla INCRBY, aumenta el incremento del valor especificado
  3. Tecla DECR, valor decreciente
  4. Decremento de la tecla DECRBY, especifique el decremento del valor especificado

(8) Obtenga la longitud de la cadena y agregue el contenido

  1. Tecla STRLEN, obtiene la longitud del valor
  2. AÑADIR valor clave, agregar contenido

2, Lista

(1) Introducción a la lista

La lista List es una lista simple de cadenas, ordenadas en orden de inserción, y los elementos se pueden agregar a la lista List desde la cabeza o la cola.

La longitud máxima de la lista es 2^32 - 1, lo que significa que cada lista admite más de 4 mil millones de elementos.

Las funciones principales son push/pop, que generalmente se utilizan en pilas, colas, colas de mensajes y otros escenarios.

  1. Tanto la izquierda como la derecha se pueden insertar y agregar;
  2. Si la clave no existe, cree una nueva lista enlazada;
  3. Si la clave existe, agregue el contenido;
  4. Si se elimina todo el valor, la clave correspondiente también desaparecerá;

Su capa inferior es una lista doblemente enlazada, que tiene un alto rendimiento en ambos extremos de la operación , y el rendimiento de operar los nodos intermedios a través de subíndices de índice será deficiente.

(2) Escenarios de aplicación

① cola de mensajes

Usando lpush + rpopo rpush + lpopimplementando colas de mensajes, Redis también admite operaciones de bloqueo, usando comandos de bloqueo para implementar colas de bloqueo al extraer elementos.

② Utilizar como pila

Usar lpush+lpopo rpush+rpopimplementar una pila.

③ Lista de artículos

(3) Comandos comunes

3, hachís

(1) Introducción al hachís

Hash es una colección de pares clave-valor (clave-valor), y el valor también es un hash, que es equivalente a Map<String,Map<Object,Object>>.

(2) Escenarios comunes

Debido a la estructura de datos especial, el hash se usa generalmente como un bean de almacenamiento, y la estructura de datos de String+JSON almacena escenarios de aplicaciones específicos.

(3) Comandos comunes

4, conjunto

(1) Introducción al tipo de conjunto

El tipo Conjunto es una colección de clave-valor única y desordenada, y su orden de almacenamiento no se almacenará en el orden de inserción.

Un conjunto puede almacenar hasta 2^32-1 elementos. El concepto es básicamente similar al conjunto en matemáticas, que puede ser intersección, unión, diferencia, etc., por lo que el tipo Conjunto no solo admite sumas, eliminaciones, modificaciones y consultas dentro del conjunto, sino que también admite intersección, unión y diferencia. de múltiples conjuntos.

(2) Escenarios de aplicación

① Visible para los mismos amigos

En la escena del círculo de amigos, para las funciones de me gusta y comentarios, las mismas funciones visibles se pueden realizar a través de la intersección.

② Atención mutua y agrado común

③ Función de lotería

(3) Comandos comunes

5, conjunto

(1) Introducción al tipo Zset

En comparación con el tipo Set, el tipo Zset (tipo de conjunto ordenado) tiene una puntuación de atributo de clasificación más (valor en puntos). Para el conjunto ordenado ZSet, cada elemento de almacenamiento es equivalente a dos valores, uno es una combinación ordenada Los valores del elemento y uno es el valor de clasificación.

El conjunto ordenado conserva la propiedad de que el conjunto no puede tener miembros duplicados (las puntuaciones se pueden repetir), pero la diferencia es que los elementos del conjunto ordenado se pueden ordenar.

zset k1 score1 v1 score2 v2

(2) Escenarios de aplicación

① Tabla de posiciones

Use la puntuación para registrar la cantidad de Me gusta y luego ordene según la puntuación para realizar la función de la tabla de clasificación.

② Cola de mensajes de retraso

En el sistema de pedidos, el pago debe realizarse dentro de los 15 minutos posteriores a la realización del pedido, de lo contrario, el pedido se cancelará automáticamente.

El tiempo 15 minutos después de que se realiza el pedido se usa como puntaje, y el pedido se almacena en Redis como el valor, y el consumidor sondea para consumir.Si el consumo es mayor o igual que el puntaje, el pedido se cancela.

(3) Comandos comunes Zset

6, mapa de bits

(1) Introducción al mapa de bits

El mapa de bits, es decir, un mapa de bits, es una serie de matrices binarias continuas (0 y 1), y los elementos se pueden colocar por desplazamiento (offset). BitMap usa el bit de unidad más pequeño para establecer 0|1 para representar el valor o estado de un elemento, y la complejidad de tiempo es O(1).

(2) Escenarios de aplicación

Dado que un bit es la unidad más pequeña en una computadora, usarlo para almacenamiento ahorrará espacio y es especialmente adecuado para escenarios donde se usa una gran cantidad de datos y estadísticas binarias.

① Estadísticas de facturación

② Determinar si el usuario ha iniciado sesión

③ Cuente las personas que estudian y registran continuamente

(3) Comandos comunes de mapa de bits

7, campo de bits

A través del comando bitfield, se pueden operar múltiples bits a la vez. Realizará una serie de operaciones y devolverá una matriz de respuesta. Los elementos en esta matriz son los resultados de ejecución de las operaciones correspondientes en la lista de parámetros.

8, HyperLogLog

(1) Introducción a HyperLogLog

Redis HyperLogLog es un nuevo tipo de datos en la versión 2.8.9 de Redis. Es un tipo de recopilación de datos que se utiliza para la " cardinalidad estadística ". Las estadísticas de cardinalidad se refieren a la cantidad de elementos únicos en una colección. Pero cabe señalar que HyperLogLog es una regla estadística basada en la probabilidad, que no es muy precisa, y la tasa de error estándar es del 0,81 %.

Entonces, en resumen, HyperLogLog proporciona un recuento de deduplicación impreciso.

La ventaja de HyperLogLog es que cuando el número o el volumen de los elementos de entrada es muy, muy grande, el espacio de memoria requerido para calcular la cardinalidad siempre es fijo y pequeño.

En Redis, cada clave de HyperLogLog solo necesita 12 KB de memoria para calcular la cardinalidad de casi 2 ^ 64 elementos diferentes. En comparación con los tipos Set y Hash, que consumen más memoria a medida que aumenta la cantidad de elementos, HyperLogLog ahorra mucho espacio.

(2) Escenarios de aplicación

Recuento de UV de páginas web de un millón de niveles

(3) Comandos comunes

  1. pfadd elemento clave, agregar elemento
  2. clave pfcount, devuelve el valor estimado de la base del HyperLogLog especificado;
  3. pfmerge destkey sourcekey, fusiona múltiples HyperLogLogs en un HyperLogLog;

9, GEO

(1) Introducción a GEO

Redis GEO es un nuevo tipo de datos en Redis versión 3.2 Se utiliza principalmente para almacenar información de ubicación geográfica y operar con la información almacenada.

En nuestra vida diaria, dependemos cada vez más de la búsqueda de "restaurantes cercanos" y la llamada de taxis en el software de solicitud de taxis, todos los cuales son inseparables de las aplicaciones del Servicio basado en la ubicación (LBS). Los datos a los que accede la aplicación LBS son un conjunto de información de longitud y latitud asociada con personas o cosas, y GEO es muy adecuado para la aplicación de escenarios de servicio LBS si se puede consultar el rango de latitud y longitud adyacente.

(2) Escenarios de aplicación

Software de posicionamiento como AutoNavi Maps y Didi Taxi.

(3) Comandos comunes

10, corriente

(1) Introducción a la corriente

Redis Stream es un tipo de datos recién agregado en la versión 5.0 de Redis Redis es un tipo de datos especialmente diseñado para colas de mensajes.

Antes de que saliera Redis 5.0 Stream, la implementación de las colas de mensajes tenía sus propios defectos, por ejemplo:

  • En el modo de publicación-suscripción, los mensajes no se pueden guardar de manera confiable si no se pueden conservar, y el cliente no puede leer los mensajes históricos de los clientes que se han vuelto a conectar fuera de línea;
  • La forma en que List implementa las colas de mensajes no se puede consumir repetidamente. Un mensaje se eliminará después del consumo y el productor debe implementar una identificación única global por sí mismo.

Basado en los problemas anteriores, Redis 5.0 lanzó el tipo Stream, que también es la función más importante de esta versión. Se utiliza para implementar perfectamente la cola de mensajes. Admite la persistencia de mensajes, admite la generación automática de ID únicos globales, Admite el modo de mensajes de confirmación de confirmación y admite el consumo. El modo de grupo, etc., hace que la cola de mensajes sea más estable y confiable.

(2) Escenarios de aplicación

cola de mensajes

(3) Comandos comunes

7. Resumen

Redis es un sistema de almacenamiento de clave-valor que admite tipos de datos 10. Resume por qué se debe usar Redis en lugar de un mapa como caché de programa, por qué Redis es de subproceso único, las ventajas y desventajas de Redis y los escenarios comunes de Redis. empezando.

Supongo que te gusta

Origin blog.csdn.net/wdj_yyds/article/details/131919389
Recomendado
Clasificación