Cinco tipos de datos de uso común en redis

El siguiente es mi resumen de las cinco API de uso común para las categorías de datos, ordenadas desde el principio hasta el final según la frecuencia de uso.
Inserte la descripción de la imagen aquí

1.Tipo de cadena

La cadena es el tipo más básico de redis. En redis, una clave corresponde a un valor.
El tipo String es binario seguro, lo que significa que la cadena redis puede contener cualquier dato, como imágenes jpg u objetos serializados. La estructura de datos Strings es un tipo de clave-valor simple. El valor no es solo una cadena, sino también un número.

Comandos comunes: set, get, decr, incr, mget, etc.

Escenario de aplicación: String es el tipo de datos más comúnmente utilizado, y el almacenamiento de clave / valor ordinario se puede clasificar en esta categoría, es decir, puede realizar completamente la función Memcached actual y es más eficiente. También puede disfrutar de las funciones de persistencia de tiempo, registro de operaciones y replicación de Redis. Además de proporcionar las mismas operaciones get, set, incr, decr y otras operaciones que Memcached, Redis también proporciona las siguientes operaciones:

  • Obtener la longitud de la cuerda
  • Agregar contenido a la cadena
  • Establecer y obtener una cierta parte de la cadena
  • Establecer y obtener un poco de la cuerda
  • Establecer el contenido de una serie de cadenas en lote

Método de implementación: La cadena se almacena en redis de forma predeterminada como una cadena, a la que hace referencia redisObject. Cuando encuentra incr, decr y otras operaciones, se convertirá a un valor numérico para el cálculo. En este momento, el campo de codificación de redisObject es int.

2.Hash

El hash de Redis es una colección de pares clave-valor. El hash de Redis es una tabla de mapeo entre el campo y el valor del tipo de cadena, y el hash es particularmente adecuado para almacenar objetos. Similar a Map <String, Object> en Java.

El modo KV permanece sin cambios, pero V es un par clave-valor.

Comandos comunes: hget, hset, hgetall, etc.

Escenario de aplicación: en Memcached, a menudo empaquetamos información estructurada en un HashMap y la almacenamos como un valor de cadena después de la serialización en el lado del cliente, como el apodo, la edad, el sexo, los puntos, etc. del usuario, que deben modificarse en este momento. Para un elemento determinado, generalmente es necesario eliminar todos los valores después de la deserialización, modificar el valor de un elemento determinado y luego serializarlo y almacenarlo nuevamente. Esto no solo aumenta la sobrecarga, sino que tampoco se aplica a situaciones en las que son posibles operaciones simultáneas (por ejemplo, dos operaciones simultáneas necesitan modificar la integral). La estructura Hash de Redis le permite modificar solo un valor de atributo al igual que actualizar un atributo en la base de datos.

Démosle un ejemplo brevemente para describir el escenario de aplicación de Hash. Por ejemplo, queremos almacenar los datos de un objeto de información de usuario, que contiene la siguiente información:

El ID de usuario es la clave que se debe buscar, y el objeto de usuario de valor almacenado contiene información como el nombre, la edad, la fecha de nacimiento, etc. Si se utiliza una estructura de clave / valor común para almacenarlo, existen principalmente los dos métodos de almacenamiento siguientes:

El primer método usa el ID de usuario como clave de búsqueda y encapsula otra información en un objeto para ser almacenado de manera serializada. La desventaja de este método es que aumenta la sobrecarga de serialización / deserialización y necesita modificar uno de ellos. Cuando se necesita información, se debe recuperar todo el objeto y la operación de modificación debe proteger la concurrencia, lo que introduce problemas complicados como CAS.

El segundo método consiste en almacenar tantos pares clave-valor como miembros del objeto de información del usuario, y utilizar el ID de usuario + el nombre del atributo correspondiente como identificador único para obtener el valor del atributo correspondiente, aunque se eliminan los problemas de simultaneidad y sobrecarga de serialización , Pero el ID de usuario se almacena repetidamente. Si hay una gran cantidad de tales datos, el desperdicio de memoria sigue siendo considerable.

Entonces, el Hash proporcionado por Redis resuelve este problema muy bien. El Hash de Redis en realidad almacena el Valor internamente como un HashMap y proporciona una interfaz para acceder directamente a los miembros de este Mapa, como se muestra en la siguiente figura:

En otras palabras, la Clave sigue siendo el ID de usuario, el valor es un Mapa, la clave de este Mapa es el nombre del atributo del miembro y el valor es el valor del atributo, de modo que la modificación y el acceso a los datos se pueden pasar directamente a través de la Clave de su Mapa interno (en Redis Llame a la clave del campo Mapa interno), es decir, a través de la clave (ID de usuario) + campo (etiqueta de atributo), se pueden manipular los datos de atributo correspondientes. No es necesario almacenar datos repetidamente, y no traerá serialización y control de modificación concurrente. problema. Resuelto muy bien el problema.

Al mismo tiempo, debe tenerse en cuenta que Redis proporciona una interfaz (hgetall) para obtener todos los datos de atributos directamente, pero si hay muchos miembros del mapa interno, entonces implica la operación de atravesar todo el mapa interno. Debido al modelo de un solo subproceso de Redis, esta operación transversal Puede llevar mucho tiempo y otras solicitudes de los clientes no responden en absoluto, lo que requiere una atención especial.

Método para realizar:

Como se mencionó anteriormente, el valor correspondiente de Redis Hash es en realidad un HashMap. De hecho, habrá dos implementaciones diferentes. Cuando el Hash tenga menos miembros, Redis usará una matriz unidimensional para almacenamiento compacto con el fin de ahorrar memoria en lugar de real Para la estructura HashMap, la codificación del valor correspondiente redisObject es zipmap.Cuando aumenta el número de miembros, se convertirá automáticamente en un HashMap real, y la codificación es ht.

3.Lista

La lista de redis es una lista simple de cadenas, ordenadas en el orden de inserción. Puede agregar un elemento al principio (izquierda) o al final (derecha) de la lista. Su capa inferior es en realidad una lista vinculada.

Comandos comunes: lpush, rpush, lpop, rpop, lrange, etc.

Escenarios de aplicación:

Hay muchos escenarios de aplicación para la lista de Redis, y también es una de las estructuras de datos más importantes de Redis. Por ejemplo, la lista de seguimiento y la lista de fans de Twitter se pueden implementar utilizando la estructura de lista de Redis.

Las listas son listas enlazadas. Creo que cualquiera con un poco de conocimiento de la estructura de datos debería ser capaz de entender su estructura. Usando la estructura de Listas, podemos implementar fácilmente el ranking de noticias más recientes y otras funciones. Otra aplicación de Listas es la cola de mensajes,
puedes usar la operación PUSH de Lists para almacenar tareas en las Listas, y luego el hilo de trabajo usa la operación POP para sacar las tareas para su ejecución. Redis también proporciona una API para manipular una determinada sección de Listas, puede consultar y eliminar directamente una determinada sección de elementos en Listas.

Método para realizar:

La implementación de la lista de Redis es una lista doblemente vinculada, que puede admitir la búsqueda inversa y el recorrido, lo cual es más conveniente de operar, pero trae una sobrecarga de memoria adicional. Muchas implementaciones en Redis, incluido el envío de colas de búfer, también usan estos datos estructura.

4.Conjunto

El conjunto de Redis es una colección desordenada de tipo cadena.

Comandos comunes:
sadd, spop, smembers, sunion, etc.

Escenarios de aplicación:

La función externa proporcionada por el conjunto de Redis es similar a la función de una lista. La característica especial es que el conjunto puede ordenar automáticamente el peso. Cuando necesita almacenar una lista de datos y no desea datos duplicados, el conjunto es una buena opción , And set proporciona una interfaz importante para juzgar si un miembro está en una colección de conjuntos, que tampoco es proporcionada por list.

El concepto de Conjuntos es una combinación de valores únicos. Utilizando la estructura de datos de Conjuntos proporcionada por Redis, se pueden almacenar algunos datos colectivos. Por ejemplo, en una aplicación Weibo, todos los seguidores de un usuario se pueden almacenar en una colección, y todos sus fans se pueden almacenar en una colección. Redis también proporciona operaciones como intersección, unión y diferencia para conjuntos, que pueden ser muy convenientes para implementar funciones como atención común, preferencia común, amigos de segundo grado, etc. Para todas las operaciones de conjuntos anteriores, también puede usar diferentes opciones de comando. Ya sea para devolver el resultado al cliente o guardar la colección en una nueva colección.

Método para realizar:

La implementación interna de set es un HashMap cuyo valor es siempre nulo. De hecho, se ordena rápidamente calculando el hash. Esta es la razón por la que set puede determinar si un miembro está en el conjunto.

5.Conjunto clasificado

Sobre la base del conjunto, agregue un valor de puntuación. Anteriormente, el conjunto era k1 v1 v2 v3, ahora zset es k1 puntuación1 v1 puntuación2 v2. El conjunto ordenado
también es una colección de elementos de tipo cadena como conjunto, y no se permiten miembros duplicados. La diferencia es que cada elemento está asociado con una puntuación de tipo doble. Redis utiliza puntuaciones para ordenar los miembros del conjunto de pequeños a grandes. Los miembros de zset son únicos, pero la puntuación (puntuación) se puede repetir.

Comandos de uso común:

zadd, zrange, zrem, zcard 等

escenas a utilizar:

El escenario de uso del conjunto ordenado de Redis es similar al de conjunto. La diferencia es que el conjunto no se ordena automáticamente, mientras que el conjunto ordenado puede ordenar miembros al proporcionar un parámetro de prioridad adicional (puntuación) por parte del usuario, y se inserta en orden, es decir, clasificación automática. . Cuando necesite una lista de conjuntos ordenada y no repetida, puede elegir la estructura de datos de conjuntos ordenados. Por ejemplo, la línea de tiempo pública de Twitter se puede almacenar con la hora de publicación como puntuación, de modo que se clasifique automáticamente por hora cuando se obtenga.

Además, también puede usar Conjuntos ordenados para hacer una cola ponderada. Por ejemplo, la puntuación de los mensajes normales es 1 y la puntuación de los mensajes importantes es 2, y luego los hilos de trabajo pueden optar por obtener tareas de trabajo en el orden inverso de la puntuación. Prioriza las tareas importantes.

Método para realizar:

El conjunto ordenado de Redis usa HashMap y la lista de omisión (SkipList) internamente para garantizar el almacenamiento y el orden de los datos. HashMap coloca el mapeo de los miembros para puntuar, mientras que la tabla de omisión almacena todos los miembros, y la base de clasificación se almacena en HashMap. Para la puntuación, use la estructura de la tabla de salto para obtener una eficiencia de búsqueda relativamente alta, y la implementación es relativamente simple.

Supongo que te gusta

Origin blog.csdn.net/qq_43458555/article/details/108213265
Recomendado
Clasificación