REDIS estructuras de datos común interno y codificación

1, de la secuencia: prima, int, embstr

2, de hash: tabla hash, ZipList

3: Lista: LinkedList, ZipList

4: set: tabla hash, intset

5: zConfigurar: skiplist, ZipList

 

Beneficios del Diseño:

1: codificación puede mejorar las estructuras de datos internas y externas y el comando no tiene ningún efecto

2: una variedad de implementaciones de codificación interna puede jugar a sus puntos fuertes en diferentes escenarios, tales como ZipList más para ahorrar memoria, pero el rendimiento se reducirá elementos de la lista por un largo tiempo, entonces Redis será ejecutado de acuerdo con la lista de conversión de opciones de configuración para el tipo de LinkedList memoria

 

 

Cuerda

Redis utilizando SDS ( "Dinámica de cadenas simples") Esta estructura de cadena almacenada,

1: código define la estructura de cinco SDS:

1: struct __attribute__ ((__packed__)) sdshdr5 banderas {unsigned char; Char buf []; };

2: sdshdr8

3: sdshdr16

4: sdshdr32

5: sdshdr64

2: La función principal en el campo:

len: longitud de la cadena (longitud utiliza realmente)

alloc: la asignación de tamaño de la memoria

banderas: bandera, representa los más bajos tres tipos, los cinco restantes no utilizados

buf: matriz de caracteres

3: Codificación

int Código: Guardar los de tipo largo entero de 64 bits, la clave Redis se convertirá a tipo de almacenamiento de largo, el tipo de codificación correspondiente a OBJ_ENCODING_INT

embstr codificación: longitud inferior a 44 bytes para guardar una cadena de caracteres (OBJ_ENCODING_EMBSTR)

Código prima: el ahorro de una cadena de longitud superior a 44 bytes (OBJ_ENCODING_RAW)

 

 

ZipList

1: estructura ZipList

zlbytes: indica el número de bytes ocupado ZipList, operación de redimensionamiento realiza en el momento de su uso

zltail: representa el desplazamiento del último nodo, sino también para evitar que atraviesa toda la lista

zllen: ZipList representa el número de nodos (más de 65.535 nodos, los valores de campo no válidos zllen, necesidad de atravesar para obtener el número real)

zlend: Identificador de fin representa ZipList

2: ZipList estructura de datos de nodo (abstract)

Cada lista de nodos comprimido por previous_entry_length, la codificación, el contenido de tres componentes (el campo no se refiere a la estructura real)

previous_entry_length: la longitud del nodo anterior, para atravesar hacia delante por la parte trasera, de acuerdo con la longitud del nodo anterior, o pueden requerir un cinco bytes.

codificación: registros de datos de nodo almacenan tipo y longitud de datos.

contenido: el contenido de los datos almacenados en el nodo.

ZipList un periodo de uso continuo de la memoria para almacenar datos, la fragmentación de memoria se reduce en comparación tabla hash, y una huella de memoria puntero. Y cuando el nodo es menor, ZipList más probabilidades de ser cargado en la memoria caché de la CPU.

3: ventajas ZipList

huella de memoria menos probabilidades de ser cargado en la memoria caché de la CPU

Compacta reducir la fragmentación de memoria

4: ZipList deficiencias

Cadena de actualización (inserción de la cabeza o operación de eliminación en la cabeza sobre todo cuando se guarda la transmisión lista de objetos de tipo con ZipList, los objetos no es necesario actualizar la cabeza hash almacenado.)

Cada inserto o modificar operación iniciada realloc tienen una probabilidad mayor de causar copias de memoria, lo que disminuye el rendimiento.

Una vez que el costo de la copia de la memoria, copia de la memoria correspondiente aumento se produce, debido a un conjunto de datos más grandes para ser copiados.

Cuando ZipList demasiada elemento de datos en él para encontrar elementos de datos específicos de rendimiento será muy baja debido a las operaciones de búsqueda en la necesidad ZipList a desplazar.

De la complejidad consulta se convierte en O (1) O (N) (almohadilla cuando el objeto se almacena),

5: Configuración ZipList

configuración redis.conf:

de hash-max-ZipList-512 entradas 

de hash-max-ZipList-valor 64

Cuando el número de tipos de elementos más pequeños que la configuración de hash de hash-max-ZipList-entradas (por defecto 512), mientras que todos los valores son de hash-max-ZipList-valor de configuración (por defecto 64 bytes) cuando, como ZipList de hash utiliza el Redis implementación interna, el uso ZipList de almacenamiento más compacto para lograr una pluralidad de elementos sucesivos, de modo que más excelente en términos de ahorro de memoria que tabla hash.

Redis razón de hash de este diseño es que cuando ZipList llegar a ser grande, tiene las siguientes desventajas:

 

lista buque

1: tabla de saltos skipList

skipList modelo de la cadena de múltiples capas, un nodo asignará un número aleatorio de capas (nivel) que señala hacia el puntero de registro después de nodos individuales o múltiples, sólo la necesidad de modificar el puntero del inserto de funcionamiento antes y después del nodo de inserción, sin la necesidad de muchos nodos ajuste. La reducción de la complejidad de tiempo, un promedio de O (logN), el peor caso de complejidad O (N), su rendimiento árbol equilibrado generalmente comparable.

2: Probabilidad

Cuanto mayor sea el número de capas de nodos de producir, menor es la probabilidad. El análisis cuantitativo es la siguiente:

El número de capas de al menos un nodo. El nodo 1 es mayor que el número de capas de satisfacer una distribución de probabilidad.

capas nodo es exactamente igual probabilidad 1-p.

La probabilidad de que el número de nodo de capas superiores o iguales a 2 p, el número de capas y el nodo 2 es exactamente igual a la probabilidad p (1-p).

El número de capas es mayor que la probabilidad de que el nodo 3 es igual a P2, el número de capas y el nodo 3 es exactamente igual a la probabilidad p2 (1-p).

capas de nodo 4 mayores que o iguales a la p3 probabilidad y la probabilidad nodo de exactamente el número de capas 4 de p3 (1-p).

3: Comparación de skiplist y árboles equilibrados, tablas hash

  1. y varios skiplist árbol equilibrado (por ejemplo, AVL, árboles rojo-negro, etc.) elementos están ordenados, y la tabla hash no se ordena. Por lo tanto, la tabla hash sólo puede hacerlo una sola búsqueda de claves, y no aptos para la búsqueda de rango. El llamado ámbito de la búsqueda, refiriéndose a aquellos que se encuentran todos los nodos de tamaño entre los dos valores especificados.
  2. Encontrar el tiempo para hacer gama, el funcionamiento árbol equilibrado es más complicado que skiplist. Después de equilibrar los árboles, nos encontramos con el pequeño valor del rango especificado, sino también el orden con el fin de atravesar los otros nodos continúan a no más de buscar un valor grande. Si no equilibrar el árbol una cierta transformación, donde el orden previo no es fácil de lograr. Y ser muy simple para encontrar el rango de skiplist, justo después de encontrar un valor pequeño, la lista de la primera capa de atravesar varios pasos que puede lograrse.
  3. operaciones de inserción y supresión árbol equilibradas pueden conducir a un ajuste de la complejidad lógica sub-árbol, y las inserciones y deleciones skiplist Sólo es necesario modificar nodos adyacentes el puntero, simple y rápido.
  4. A partir de la huella de memoria, skiplist más flexible que algunos de árbol equilibrado. Generalmente, cada nodo comprende un equilibrado árbol 2 puntero (señalando el subárbol izquierdo y derecho, respectivamente), mientras que el número de punteros skiplist cada nodo contiene una media de 1 / (1-p), dependiendo del tamaño del parámetro p. Si, como Redis en la realización de la misma, toma p = 1/4, a continuación, cada nodo contiene una media de 1,33 puntero, árbol de equilibrado que una ventaja.
  5. Encontrar una sola tecla, skiplist y árboles equilibrados son complejidad del tiempo de O (log n), más o menos, y tabla de dispersión mientras se mantiene un valor de probabilidad baja de los conflictos de hash, cerca de encontrar tiempo complejidad O (1) un mayor rendimiento. Así diversos estructura de mapa o diccionario normalmente se usan, sobre todo implementación basada en la tabla hash.
  6. Comparar hasta la dificultad de implementación del algoritmo, skiplist mucho más simple que el árbol equilibrado.

Publicado 50 artículos originales · ganado elogios 2 · Vistas 2293

Supongo que te gusta

Origin blog.csdn.net/eafun_888/article/details/104714572
Recomendado
Clasificación