Análisis de código fuente Redis estructura de datos subyacente - lista enlazada

definición

Como estructura de datos de uso común, la lista vinculada se crea en muchos lenguajes de programación avanzados, como: java; porque Redis se desarrolla en lenguaje C, pero no hay una estructura de datos de lista vinculada integrada en lenguaje C, por lo que Redis creó su propia Implementación de listas enlazadas.

Cada nodo de lista enlazada está representado por una adlist.h/listNodeestructura :

/* Node, List, and Iterator are the only data structures used currently. */

typedef struct listNode {
    struct listNode *prev;
    struct listNode *next;
    void *value;
} listNode;

Múltiples listNodepueden formar una lista enlazada de dos extremos a través de prevy nextpunteros , como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí

Una lista vinculada puede contener múltiples nodos de lista vinculada, adlist.h/list

/*
 * 双端链表结构
 */
typedef struct list {

    // 表头节点
    listNode *head;

    // 表尾节点
    listNode *tail;

    // 节点值复制函数
    void *(*dup)(void *ptr);

    // 节点值释放函数
    void (*free)(void *ptr);

    // 节点值对比函数
    int (*match)(void *ptr, void *key);

    // 链表所包含的节点数量
    unsigned long len;
} list;

list 结构为链表提供了表头指针head 、表尾指针tail y el contador de longitud len de la lista enlazada, mientras que los miembros dup y free match` son funciones específicas de tipo necesarias para implementar listas enlazadas polimórficas:

  • dupLa función se utiliza para copiar el valor guardado por el nodo de la lista vinculada;
  • freeLa función se utiliza para liberar el valor guardado por el nodo de la lista enlazada;
  • matchLa función se utiliza para comparar si el valor almacenado por el nodo de la lista vinculada es igual a otro valor de entrada.

Resumir

  • Las listas vinculadas se usan ampliamente para implementar varias funciones de Redis, como claves de lista, publicación y suscripción, consulta lenta, monitoreo, etc.
  • Cada nodo de la lista vinculada está representado por una listNodeestructura , y cada nodo tiene un puntero al nodo anterior y al nodo siguiente, por lo que la implementación de la lista vinculada de Redis es una lista vinculada de dos extremos.
  • Cada lista enlazada está representada por una listestructura , que tiene información como el puntero del nodo principal, el puntero del nodo final y la longitud de la lista enlazada.
  • Debido a que el nodo frontal del nodo principal de la lista vinculada y el nodo posterior del nodo final apuntan a él NULL, la implementación de la lista vinculada de Redis es una lista vinculada acíclica.
  • Al configurar diferentes funciones específicas de tipo para las listas vinculadas, las listas vinculadas de Redis se pueden usar para almacenar valores de varios tipos.

Supongo que te gusta

Origin blog.csdn.net/m0_54369189/article/details/113703527
Recomendado
Clasificación