Colección de citas famosas - Slogan de motivación - 4.Principios básicos del alto rendimiento de Redis.

4.Principios básicos del alto rendimiento de Redis.

La velocidad de lectura y escritura de la memoria es muy rápida.

Modelo Epoll

Cinco estructuras de datos de Redis de uso común y sus respectivas estructuras de implementación subyacentes.

Conjunto de lista hash de cadenas conjunto ordenado (zset)

La implementación subyacente de una cadena es una cadena dinámica simple (SDS - cadena dinámica simple).

La implementación subyacente de hash es una tabla hash o lista zip.

La implementación subyacente de list es una lista rápida o una lista comprimida.

La implementación subyacente de set es una tabla hash o una matriz de enteros.

La implementación subyacente del conjunto ordenado (zset) es una lista comprimida o una lista de omisión.

Descripción general de la implementación subyacente de cada estructura de datos

Hay tres situaciones en las que el valor es un tipo de cadena.

(1). Cuando el valor establecido es un tipo entero, la capa inferior de redis convertirá el tipo de cadena a int para su almacenamiento.

(2) Cuando el valor establecido es menor o igual a 44 bytes, la codificación utilizada es embstr.

(3) Cuando el valor establecido es superior a 44 bytes, el código utilizado es sin formato.

Redis está escrito en lenguaje C y el tipo de cadena se implementa mediante la matriz de caracteres char[]. Redis no utiliza directamente la forma de matriz de caracteres en lenguaje C, sino que transforma y construye una estructura de datos de SDS.

La capa inferior de la lista se implementa mediante el uso de una lista rápida de lista doblemente enlazada o una lista zip de lista enlazada comprimida.

La razón por la que la capa inferior de la lista no utiliza la estructura tradicional de lista doblemente enlazada es

(1). La lista doblemente enlazada requiere un puntero frontal y un puntero posterior. y cada puntero ocupa 8 secciones de palabras respectivamente y ocupa mucha memoria.

(2) Un problema común con las listas enlazadas es que generarán una gran fragmentación de la memoria.

La estructura Ziplist de la lista enlazada comprimida es

La estructura de lista rápida de la lista rápida doblemente enlazada

La implementación subyacente de hash es hashtable o ziplist.

La implementación subyacente de la tabla hash

Cuando la cantidad de datos es pequeña o de un solo elemento, la capa subyacente utiliza almacenamiento ziplist, que se puede determinar mediante la configuración.

1. Hashtable está desordenado, mientras que ziplist está ordenado.

2. Si puedes usar hashes, úsalos primero, no cadenas, porque si usas demasiadas cadenas, se crearán demasiadas claves. Cuando hay demasiadas claves, pueden ocurrir fácilmente colisiones de hash, por lo que se requieren repeticiones frecuentes y cada repetición crea el doble de memoria, lo que resulta en memoria desperdiciada.

La implementación subyacente de hash es un conjunto de matrices de enteros o una tabla hash.

Cuando el conjunto es un número entero, la implementación subyacente del conjunto se implementa utilizando la estructura intset.

Si hay un valor de cadena en la colección, use una tabla hash para implementarlo.

Intset está ordenado, hashtable está desordenado.

La capa inferior de sortset se implementa utilizando la estructura de una lista ziplist o skiplist comprimida.

Cuando la cantidad de datos es pequeña, se puede implementar mediante ziplist. Cuando la cantidad de datos es grande, se puede implementar mediante configuración.

La estructura subyacente bajo la configuración predeterminada

La implementación subyacente de skiplist

Cuando busque el elemento correspondiente, primero busque desde el nivel de índice más alto, por ejemplo, busque c 150 y luego busque desde L1, el puntero de L1 apunta a b. Si se encuentra que b120 es menor que 150, continúe buscando más tarde. Si el puntero de B apunta a nulo, búsquelo en el siguiente nivel superior y luego búsquelo en el puntero de B del siguiente nivel inferior.

1,/u 010710458/article/details/80604740