这是我参加更文应战的第24天,活动概况查看: 更文应战
前语
- 在【数据结构】学习中,绕不过的便是链表和数组的学习了!数组应该更简单了解点!由于他和咱们平常的逻辑一样。可是链表在刚入门的同学中应该算是比较笼统的了!尤其是指针交流方位更数据结构题库及答案是容一部分同学望而生畏!
- 今天咱们来学习下
Redis
中的常用的链表数据结构
list
- 在
Redis
低版别(3.2之前)中list数据结构底层便是运用链表来进行串redis岗兵形式联数据的!
- 上图便是
Redis
中在操作Lis链表结构t数据结构时的结构图!在redis
中并不是仅仅运用这一种双向的链表redis和mysql差异结构.关于ziplist等其他指针式万用表结构咱们这儿暂时不评论。 - 而针对一整条链条redis有将它 笼统化指针万用表的使用方法一个list方针
- node是链条中重要的组成部分,而list咱们能够了解成对整个链条的描绘。list中包含头结点、尾结点、链条中节点个数、节点的复制开释比对等功能!
typedef struct listNo链表不具有的特点是de {
struct lredis持久化istNode *prev;
struct listNode *next;
void *value;
} listNode;
typedef struct listIter {
listNode *next;
int direction;
} listIter;
typedef struct list {
listNoredis岗兵形式de *head;
listNode *ta链表是选用链式存储结构的线性表il;
void *(*dup)(void *ptr);
v数组指针oid (*free)(void *ptr);
int (*match)(void *ptr, void *key);
unsigned long len;
} list;
函数 | 作用 |
---|---|
dup | 复制链表节点值 |
free | 开释链表节点值 |
matcredis数据结构h | 比对链表节点值与指定值是否想的持平 |
小结
- 很明显在redis中链表是一种双指针链表,能够通过当时节点轻松定位前后节点!
- list中能够轻松链表的创建获取链表头尾节点!这也就说明redis中的lpush 、 rpush指令毕竟的完成了。便是通过改变头、尾指针就能够了。操作那是非常灵敏的
- list中len表明链表长度。便是一个节点计数器。对应着llen 指令
- 了解数据结构后根本上就能够了解redis对应的指针数学操作指令在内存中的结构了
list其他数据结构
- 上面咱们提到在3.2之前的版别中r数组c言语edis选用链表结构进行存储list数据。在3.2之后开端呈现一种ziplist结构的数据结构!
- 首要咱们考虑下listnode用的好好的为什么要改用ziplist结构。由于list结构中存储了头尾节点方便了咱们寻址可是牺牲了内存说白了便是空间换时刻
- ziplist便是针对内存浪费的问题进行了优化。
- 我們看下ziplist的存储内存分布图(以下图片来源于网络)
方数组去重位 | 作用 |
---|---|
zlbytes | ziplist字节长度;长度最长为(2数据结构^32)-1 |
zltail | 整个ziplist偏移量;四个字节 |
zllen | ziplist中存redis是什么储的元指针数学素个数;两个字节 |
entryX | ziplist中元素 |
zlend | 结束位 。固定值0xFF=255 |
typed数组的界说ef st数据结构期末考试题及答案ru指针数组和数组指针的差异ct zlentry {
unsigned int prevrawlensize, pr指针的拼音evrawlen;
unsigned int lensize, len;
uns数据结构c言语版第二版课后答案igned int headersize;
unsigned char数据结构严蔚敏第二版课后答案 encoding;
unsigned char *p;
} zlentr数据结构严蔚敏第二版课后答案y;
小结指针的拼音
- ziplist又称为紧缩列表本质上便是一个数组。除了list以外指针c言语还有hash也都运链表回转用了zipliredis是什么st. 紧缩列表虽然节省了内存的开支可是指针的拼音随之而来的问题便是连redis和mysql差异锁更新。关于什么是连锁更新咱们今后在分析数组初始化!本文是一篇入门级的文章。到这儿就结束啦
欢迎点个赞呗