Historia de Redis
Tipos de datos públicos de Redis
Los tipos de datos más utilizados en Redis incluyen principalmente los siguientes cinco tipos:
Línea
Mixto
Directorio
Configuración
Colección ordenada
Antes de describir estos tipos de datos en detalle, primero comprendamos cómo describir la administración de memoria de Redis a través de una imagen. Estos diferentes tipos de datos:
En primer lugar, redis utiliza un objeto redisobject para representar todas las claves y valores. La información principal de Redisobject se muestra en la figura anterior: el tipo representa uno.
¿Qué tipo de datos es un objeto de valor? La codificación es la forma en que se almacenan los diferentes tipos de datos en redis. Por ejemplo, tipo=cadena indica almacenamiento de valores.
Una cadena común, entonces la codificación correspondiente puede ser raw o int. Si es int, significa que redis en realidad almacena y representa esta cadena según el tipo numérico. Por supuesto,
La premisa es que la cadena en sí se puede representar mediante un valor numérico, como "123".
Una cadena como "456".
El campo vm debe explicarse aquí. Solo cuando la función de memoria virtual de redis esté activada, este campo realmente asignará memoria. Esta función está desactivada de forma predeterminada y se presentará en detalle más adelante. Pasar
En la imagen de arriba, podemos encontrar que redis usa redisobject para representar todos los datos clave/valor, lo cual es una pérdida de memoria. Por supuesto, estos costos de administración de memoria se dan principalmente
Redis proporciona una interfaz de administración unificada para diferentes tipos de datos. El autor real también proporciona varios métodos para ayudarnos a ahorrar memoria tanto como sea posible, que se discutirán en. detalle más adelante.
Analicemos uno a uno los usos e implementación interna de estos cinco tipos de datos:
Línea
Comandos comunes:
Establecer , obtener, reducir, aumentar, gestionar, etc.
Escenarios de aplicación:
Las cadenas son el tipo de datos más utilizado y el almacenamiento de clave/valor ordinario se puede clasificar en esta categoría, que no se explicará aquí.
Modo de implementación:
La cadena almacenada en redis es una cadena de forma predeterminada y está referenciada por redisobject. Cuando se encuentran operaciones como incr y decr, se convertirán en valores numéricos para el cálculo. En este momento, el campo de codificación de redisobject es int.
Mixtos
Comandos comunes:
Hget, hset, hgetall, etc.
Escenario de aplicación:
Damos un ejemplo simple para describir el escenario de aplicación de hash. Por ejemplo, queremos almacenar datos de un objeto de información de usuario, que contiene la siguiente información:
La identificación del usuario es la palabra clave que se buscará y el objeto de usuario de valor almacenado contiene información como nombre, edad, cumpleaños, etc Si se almacena en una estructura de clave/valor pública, existen dos métodos de almacenamiento principales:
El primer método utiliza la identificación del usuario como clave de búsqueda y encapsula otra información en un objeto, y se almacena en forma serializada. . La desventaja de este método es que aumenta el costo de serialización/deserialización. Cuando es necesario modificar una parte de la información, es necesario recuperar todo el objeto. La operación de modificación debe proteger la concurrencia, lo que introduce problemas complejos como cas.
El segundo método consiste en almacenar tantos pares clave-valor como miembros en el objeto de información del usuario y utilizar la identificación del usuario + el nombre del atributo correspondiente como identificador único para obtener el valor de el atributo correspondiente. Aunque se eliminan los problemas de serialización y concurrencia, los ID de usuario se almacenan repetidamente. Si hay una gran cantidad de dichos datos, el desperdicio de memoria sigue siendo muy considerable.
Entonces el hash proporcionado por redis resuelve muy bien este problema.
El hash de redis en realidad significa que el valor almacenado internamente es un mapa hash, que 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,
p>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 esta manera, los datos se pueden modificar y modificar directamente. se accede a través de su clave asignada interna (la clave asignada interna se llama campo en Redis).
Es decir, mediante clave (id de usuario) + campo (etiqueta de atributo).
Los datos de atributos correspondientes se pueden manipular sin el almacenamiento repetido de datos y no causarán problemas con la serialización y el control de modificaciones concurrentes. Resuelve este problema muy bien.
Al mismo tiempo, cabe señalar que redis proporciona una interfaz (hgetall) que puede obtener directamente todos los datos de atributos. Sin embargo, si hay muchos miembros mapeados internamente, implica atravesar todo el mapeo interno.
Operación, debido al modelo de subproceso único de Redis, esta operación transversal puede llevar mucho tiempo y otras solicitudes de los clientes no responden en absoluto, por lo que se requiere atención especial.
Modo de implementación:
Ya dije sobre redis
El valor correspondiente al hash es en realidad un hashmap. En realidad, aquí hay dos implementaciones diferentes. Cuando el número de miembros hash es pequeño, redis utilizará un método similar a una matriz unidimensional para el almacenamiento compacto en lugar de utilizar la estructura real del mapa hash y los valores correspondientes.
La codificación de redisobject es zipmap. Cuando aumenta el número de miembros, automáticamente se convertirá en un hashmap real.
Directorio
Comandos comunes:
Lpush, rpush, lpop, rpop, lrange, etc.
Escenarios de aplicación:
Redis
List tiene muchos escenarios de aplicación y también es una de las estructuras de datos más importantes de Redis. Por ejemplo, la lista de seguidores y la lista de fans de Twitter se pueden implementar a través de la estructura de lista de redis. Son fáciles de entender y no se describirán en detalle aquí.
Modo de implementación:
Redis
La implementación de la lista es una lista doblemente vinculada, que puede admitir búsqueda inversa y recorrido, y es más fácil de operar, pero trae algo de sobrecarga de memoria adicional. Muchas implementaciones dentro de Redis, incluidas las colas de búfer de envío, también utilizan esta estructura de datos.
Configuración
Comandos comunes:
Sadd, spop, sembers, sunion, etc.
Escenarios de aplicación:
Redis
Las funciones proporcionadas por set son similares a las de list, pero la característica especial es que set se puede copiar automáticamente. Cuando necesita almacenar una lista de datos y no desea datos duplicados, set es una buena opción. Set proporciona una interfaz importante para determinar si un miembro está en la colección, algo que la lista no puede proporcionar.
Modo de implementación:
La implementación interna de set es a.
Hashmap cuyo valor siempre es nulo se ordena rápidamente calculando hash, razón por la cual set puede proporcionar un método para determinar si un miembro está en el conjunto.
Ordenar conjuntos
Comandos comunes:
zad, zrange, zrem, zcard, etc.
Escenarios de uso:
Los escenarios de uso de los conjuntos ordenados de Redis son similares a los conjuntos, excepto que los conjuntos no se clasifican ni clasifican automáticamente.
El conjunto puede ordenar miembros proporcionando una puntuación de parámetro adicional y se inserta en orden, es decir, se ordena automáticamente. Puede elegir ordenar cuando necesite una lista de favoritos ordenada y no duplicada.
Establece la estructura de datos, como por ejemplo los públicos de Twitter.