Escenarios de aplicación y conocimiento esencial de los tipos de datos de redis

Redis se basa en pares clave-valor, y su tipo de clave es en realidad objeto, por lo que el llamado tipo de datos redis es en realidad el tipo de datos de valor. Desde el gran punto de vista, existen principalmente los siguientes cinco tipos:

  1. cuerda
  2. lista
  3. picadillo
  4. conjunto
  5. sorted_set

cuerda

El tipo de cadena debe ser el más utilizado en redis. Puede almacenar cadenas, valores numéricos y mapas de bits binarios.
Entonces, ¿qué almacena realmente el tipo de cadena? En realidad es una matriz de bytes . Redis tiene muchos comandos para operaciones de tipo cadena. Use el comando de consulta de longitud de cadena para verificar si es un carácter o un byte.
El proceso de verificación consiste en almacenar caracteres chinos en diferentes codificaciones de juego de caracteres, y encontrará que el STRLENresultado del uso no es el número de caracteres, sino la longitud en bytes del carácter correspondiente bajo la codificación del juego de caracteres correspondiente.

El tipo de cadena puede almacenar cadenas , por lo que también proporciona muchas funciones básicas de manipulación de cadenas de uso común, como empalme de cadenas append, consulta de longitud strleny obtención de caracteres en posiciones específicas getrange.
En muchos diseños que involucran sistemas de permisos, el tipo de cadena se usa a menudo para almacenar tokens y se establece un cierto período de validez.

Las operaciones anteriores y las siguientes operaciones se helppueden consultar en redis-cli , por ejemplo, para consultar las funciones admitidas por cadena, puede usarlo help @string.

El tipo de cadena puede almacenar valores , por lo que también proporciona muchas funciones de operación para valores, como sumar uno incr, restar uno decr, sumar un valor específico incrby, restar un valor específico, decrbyetc.
Esta función tendrá una buena aplicación en escenarios empresariales como la cantidad de visitas, comentarios, online y offline de determinadas funciones de determinados sistemas.

El tipo de cadena puede almacenar mapas de bits y también proporciona muchas operaciones en mapas de bits, como establecer mapas de bits setbit, obtener datos de getbitmapas de bits bitcount, estadísticas de mapas de bits y estadísticas compuestas bitop.
El mapa de bits es una operación basada en bits binarios. Puede usar una pequeña memoria para representar una gran cantidad de datos. Es muy útil para muchos negocios estadísticos, como estadísticas de datos para escenarios específicos como semanas, meses y días.
Cabe señalar que el desplazamiento en el mapa de bits es limitado y no puede exceder el límite máximo de Integer, de lo contrario, se lanzará una excepción y el almacenamiento fallará.

Al establecer el valor del tipo de cadena, puede utilizar una sola operación seto una operación de varios elementos mset. Ya sea una operación de un solo elemento o una operación de varios elementos, hay una operación con un final final nx. Esta operación admite nxy xxoperaciones, una es El valor se puede establecer correctamente sólo cuando la clave no existe, uno es que el valor se puede establecer correctamente sólo cuando existe la clave.
Esta función puede garantizar la atomicidad de los datos hasta cierto punto, por lo que a menudo se utiliza para bloqueos distribuidos en escenarios de aplicaciones distribuidas. (Para ser precisos, la atomicidad está garantizada para operaciones con varios elementos. Dado que redis es de un solo proceso y un solo subproceso, no hay problema de atomicidad para las operaciones de un solo elemento)

lista

El tipo de lista también es un tipo muy utilizado en redis. La clave de tipo de lista tiene atributos de cabeza y cola, que apuntan al primer elemento y al último elemento de la lista respectivamente. Este diseño permite que el tipo de lista simule una variedad de estructuras de datos de uso común.

Para almacenar elementos en la lista, puede elegir agregar datos desde la izquierda o desde la derecha, también puede elegir linsertesta operación para insertar datos en una ubicación específica, y también puede usar lsetesta operación para reemplazar los datos en una ubicación específica.
El método anterior de empuje adicional tiene una operación de datos emergente correspondiente, puede optar por sacar en la misma dirección o puede optar por sacar en reversa.
Para la operación de búsqueda en la misma dirección, es decir, lpushsuma lpopy rpushsuma rpop, el resultado de esta operación son los últimos datos en entrar, primero en salir, al igual que el diseño de la estructura de datos de la pila en Java .
La extracción inversa, es decir, lpushcorrespondiente rpopo rpushcorrespondiente lpop, el resultado de esta operación es el primero en entrar, primero en salir, el llamado FIFO, exactamente la misma estructura de datos que la cola en Java .
Y linsert, lsetesta operación es la misma que la operación estructura de matriz en java .
Al mismo tiempo, la lista también admite el bloqueo asincrónico. Por ejemplo blpop, brpopesta operación bloqueará al cliente hasta que se obtenga la matriz de claves correspondiente. Esta operación puede lograr algunos requisitos comerciales de suscripción de unidifusión.
En el tipo de lista se permite que los elementos se repitan, y por el orden en que se pueden tomar se puede ver que están ordenados, y este orden es el orden en que se almacenan los datos.
En resumen, el tipo de lista redis puede reemplazar algunas API y estructuras de datos de uso común en Java, y puede garantizar mejor la confiabilidad de los datos hasta cierto punto.

El tipo de lista tiene muchas operaciones, que no se limitan a las enumeradas anteriormente. Al igual que el tipo de cadena, también puede usar el help @listmétodo para consultar la documentación de ayuda que viene con redis y aprender el correspondiente cuando lo necesite.

picadillo

Redis en sí es una estructura clave-valor. El hash aquí significa que el valor en sí es un par clave-valor. Esta estructura es como un mapa hash anidado en un mapa hash en java.
Por lo tanto, el tipo de valor hash en sí es como el tipo de cadena de redis, pero de hecho la mayoría de las operaciones de hash son muy similares a las del tipo de cadena.
Desde el comando de operación, es casi un hcarácter agregado antes del comando correspondiente de cadena. La operación de almacenar datos es agregar una clave interna sobre la base de la clave original, pero el nombre estándar aquí es campo.
Obtener busca datos, establecer datos guardados y las operaciones de suma y resta de valores son muy similares a las cadenas.

Esta estructura de hash es muy adecuada para un objeto, múltiples atributos, este tipo de almacenamiento de datos. Por ejemplo, el almacenamiento de algunos atributos de productos populares y el almacenamiento de los datos de condición de un determinado vehículo en Internet de vehículos puede reducir el funcionamiento de la base de datos cuando se utilizan los datos populares y, al mismo tiempo, puede modificar los datos de manera conveniente y eficiente.

conjunto

En términos de simplemente acceder a los datos, el tipo de lista y el tipo de conjunto en redis son en realidad muy similares a la lista y el conjunto en Java. En Java, tanto las listas como los conjuntos son colecciones y contenedores, que pueden almacenar muchos otros tipos. Las cosas están adentro, la diferencia es que las listas permiten la repetición y están ordenadas, mientras que los conjuntos no permiten la repetición.
En cuanto al tema del orden de conjuntos, hay muchas subclases de conjuntos en Java, algunas están desordenadas y otras están ordenadas, por lo que no se pueden generalizar.
En redis, similar a java, el conjunto no se puede repetir, pero el conjunto aquí está desordenado.
El conjunto no permite funciones repetitivas y tiene muchos escenarios de aplicación. Por ejemplo, se puede usar para contar los usuarios en línea dentro de un cierto período de tiempo, y los usuarios que están en línea varias veces se pueden eliminar directamente.

Además de las características del tipo de datos de conjunto en sí, redis también proporciona algunos comandos api útiles para este tipo. Por ejemplo, sinterpuede tomar la intersección de dos datos de conjunto, sdiffla diferencia de suniondos conjuntos y la unión de dos conjuntos. conjunto.
Cabe señalar aquí que en sdiffrealidad hay una dirección, que se basará en el contenido de la tecla más a la izquierda, por lo que la dirección real debe ser controlada por usted mismo cuando necesite usarla.
Además, las tres operaciones anteriores tienen todas una storeoperación asociada . Esta operación debe proporcionar una clave adicional, y los resultados de intersección, unión y diferencia se almacenarán en esta clave adicional.

El tipo de conjunto también tiene una muy buena operación, que puede generar un cierto número aleatorio según una clave dada, el comando es srandmemberque esta operación requiere un parámetro clave y un número, que es el número de números aleatorios generados.
Este número es muy particular, si es un número positivo y es menor que el número de elementos del conjunto, devolverá aleatoriamente un número determinado de datos únicos. Si es un número positivo y es mayor que el número de elementos del propio conjunto, se devolverán los datos de los datos dados, pero habrá duplicación. Si es un número negativo y es menor que el número de elementos del conjunto, el resultado puede repetirse o no. Si es negativo y mayor que el número de elementos en el propio conjunto, también se devolverá la cantidad dada de datos y habrá duplicación.
Por encima de esta función, es adecuado para códigos similares, como los escenarios de negocios de lotería.

Por ejemplo, hay una operación que necesita atención, es decir smembers, esta operación puede enumerar todos los elementos bajo una determinada clave, pero esta es una operación que consume el rendimiento de redis y debe usarse con precaución.

sorted_set

Sorted_set es un conjunto ordenado de conjuntos. En cierto sentido, sorted_set es más como un complemento de list y set. La lista está ordenada (orden de almacenamiento), pero no se des-duplica, mientras que el conjunto está des-duplicado, pero desordenado.
Cada uno de estos diseños tiene naturalmente sus propias ventajas y cada uno tiene sus propios escenarios de aplicación, pero la necesidad de repetición y orden también es muy común, y sorted_set es de ese tipo, pero el orden aquí es diferente al de la lista. No el orden de depósito, sino el tipo.

La declaración anterior es en realidad un entendimiento. Se puede decir que sorted_set es un complemento de list y set, o se puede decir que es una síntesis. Debido a que la operación sorted_set se parece más a una combinación de operaciones de lista y conjunto, tiene operaciones de intersección, unión y diferencia como conjunto, y también tiene operaciones que bloquean la obtención de datos como lista.
Pero la diferencia es que la operación set en sorted_set también tiene operaciones de ponderación y agregación, que pueden tomar el máximo, el mínimo y la suma, lo que también hace que tenga más escenarios de aplicación.

sorted_set es un tipo ordenado con clasificación. La clasificación aquí debe tener una puntuación al almacenar datos. Este valor en puntos puede determinar el orden de los elementos correspondientes, pero este valor en puntos no significa que no cambiará si se da, se puede sumar y restar, y luego de operar el valor en puntos, el orden correspondiente también cambiará al mismo tiempo.
Esta función es muy adecuada para algunas operaciones de datos de clasificación en tiempo real, como clasificaciones de canciones, clasificaciones de blogs, clasificaciones de ventas, etc.

En términos generales, si hay clasificación, habrá otro mantenimiento de datos adicional, que inevitablemente conducirá a una baja eficiencia en las mismas circunstancias.
Lo especial de sorted_set es que la estructura de almacenamiento subyacente es una tabla de omisión de lista de omisión. Esta estructura almacena más contenido que la clave del conjunto, lo que mejora la eficiencia de sorted_sort (se agregarán detalles específicos de la estructura)

Artículos relacionados

Almacenamiento en caché y conocimientos básicos relacionados con
redis Instalación de Linux redis e instalación de software puntos de conocimiento relacionados con Linux
tipo de datos de redis conocimientos clave y escenarios de aplicación
canalización de redis, transacción, publicación y suscripción, vencimiento, filtrado y otras funciones avanzadas comunes (parte 1)
canalización de redis, Una pequeña nota de las funciones avanzadas de uso común, como transacciones, publicación y suscripción, vencimiento, filtros, etc. (Parte 2)
Integración de Springboot y uso de funciones comunes de redis.

Supongo que te gusta

Origin blog.csdn.net/tuzongxun/article/details/107371302
Recomendado
Clasificación