【Redis 源码】4adlist列表.md

1 数据结构说明

在 Redis 中,链表是用来实现列表(list)数据类型的底层数据结构之一。链表在 Redis 中被称为 list,它是一个双向链表,每个节点包含一个指向数据的指针。

2 数据结构

c 复制代码
typedef struct listNode {
    struct listNode *prev;
    struct listNode *next;
    void *value;
} listNode;
  • prev:指向当前节点的前一个节点。
  • next:指向当前节点的后一个节点。
  • value:存储在节点中的实际数据。
c 复制代码
typedef struct list {
2    listNode *head;
3    listNode *tail;
4    void *(*dup)(void *ptr);
5    void (*free)(void *ptr);
6    int (*match)(void *ptr, void *key);
7    unsigned long len;
8} list;
  • head:指向链表的第一个节点。
  • tail:指向链表的最后一个节点。
  • dup:一个复制数据的函数指针,用于在需要复制数据时使用。
  • free:一个释放数据的函数指针,用于释放节点中的数据。
  • match:一个匹配数据的函数指针,用于判断节点中的数据是否与给定的键匹配。
  • len:链表中节点的数量。
c 复制代码
typedef struct listIter {
2    listNode *next;
3    int direction;
4} listIter;

链表迭代器定义,

  • next:指向下一个要访问的节点。
  • direction:指示迭代的方向,通常是正向还是反向。
相关推荐
患得患失94911 分钟前
【Django DRF】一篇文章总结Django DRF框架
数据库·django·sqlite
伊织code32 分钟前
macOS 安装 PostgreSQL
数据库·macos·postgresql·gui·安装·客户端·psql
进击的CJR1 小时前
MySQL 8.0 OCP 英文题库解析(八)
数据库·mysql·开闭原则
旋风菠萝1 小时前
八股--SSM(2)
java·开发语言·数据库·八股·八股文·复习
petunsecn2 小时前
MySql添加非空字段时的“伪空”问题
数据库·mysql
小传blog3 小时前
解决PLSQL工具连接Oracle后无法使用ODBC导入器问题
数据库·oracle
小L爱科研3 小时前
7.6/Q1,GBD数据库最新文章解读
数据库·数据分析·逻辑回归·线性回归·健康医疗
Code哈哈笑3 小时前
【基于SpringBoot的图书购买系统】深度讲解 分页查询用户信息,分析前后端交互的原理
java·数据库·spring boot·后端·spring·交互
kingwebo'sZone3 小时前
sqlite的拼接字段的方法(sqlite没有convert函数)
java·数据库·sqlite
珹洺4 小时前
计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度
android·java·数据库