电话
400 9058 355
本篇文章带大家了解一下redis 数据结构中的双链表,简单介绍一下双链表的运用,希望对大家有所帮助!
在 Redis 数据类型中的列表list,对数据的添加和删除常用的命令有 lpush,rpush,lpop,rpop,其中 l 表示在左侧,r 表示在右侧,可以在左右两侧做添加和删除操作,说明这是一个双向的数据结构,而 list 数据结构正是双向链表,类似 java 中的 LinekdList 链表列表。【相关推荐:Redis视频教程】
链表提供了高效的节点重排能力,以及顺序的节点访问方式,通过修改节点的 pre 和 next 指针来修改链表的数据。
C 语言没有内置链表的数据结构,所以 Redis 构建了自己的链表结构。
链表是由链表以及链表节点组成,每个链表节点使用一个 adlist.h/listNode 结构来表示:
typedef struct listNode {
//前置节点
struct listNode *prev;
//后置节点
struct listNode *next;
// 节点值
void *value;
} listNode;多个 listNode 可以通过 prev 和 next 指针组成双链表的,如题所示:
多个 listNode 可以组成链表,但是为了方便管理,使用 adlist.h/list 管理链表,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,以及节点数量计算 len。下图展示一个由 list 结构和三个 listNode 节点组成的链表:
Redis 链表实现的特征有如下的总结:
链表长度:通过 list 结构中的 len 属性计算 list 的长度,而时间复杂度为O(1)列表键,发布订阅、慢查询以及监视器等。
更多编程相关知识,请访问:编程入门!!
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...