redis源码浅见之adlist

2 篇文章 0 订阅

redis源码浅见之adlist

adlist是redis项目封装的一个链表操作的库,其官方解释为A generic doubly linked list implementation,实际是组装了一个带头节点的双向非循环链表头,节点自持链表首尾两个数据节点,依次达到快速操作的目的。
源码链接如下:
adlist.h
adlist.c

难点

  • 什么是链表
  • 链表的基本操作(指针操作)

亮点:是listIter这个struct的封装和实现,它封装了链表的操作,如此在了解链表的基础知识后,可以很快入手adlist的使用,且由于封装严格,所以基本不会出现指针操作失误的情况。

链表的核心:一个数据节点分为两部分:数据部分和指针部分。数据部分用于存储数据,指针部分可是一个本类型的指针,由此可以指向任意一个同类型的数据节点,有序的将多个数据节点组装起来后,便生成一个链表。数据节点的组装必须是有有序的,形成一种链式结构。另外指针部分可以是一个或者两个,一个则只能有一种指向,两个则可以前后同时指向。

有时链表还存在一个头节点,头节点可以与数据节点是同类型的,也不可以不同类型,数据节点随时都有可能变更,但头节点不会,在链接创建之初被创建,直到链表销毁,头节点一般持有首部数据节点或者尾部数据节点,或者两个均持有。

链表分类

  • 指向不同
    • 单向链表
    • 双向链表
  • 循环
    • 循环链表,首尾相接
    • 非循环链表,从尾部无法快速找到首部
  • 头节点
    • 带头节点
    • 不带头节点

PS:阅读redis源码,特此记忆,望坚持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值