redis数据结构存储Linked List设计细节(redis的设计与实现笔记)

redis里拥有一个灵活扩展且获取表头表尾复杂度为O(1)的双端列表,分为list和listNode2部分组成。

list:

1 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; 

listNode:

1 typedef struct listNode {
2     struct listNode *prev;//前驱指针
3     struct listNode *next;//后继指针
4     void *value; //节点的值
5 } listNode;  

以下是双向链表的实现原理:

list结构存在的意义:1.获取首元素和尾元素的时间复杂度为O(1),且可以选择向后或向前遍历链表元素2.获取元素数量时间复杂度为0(1),无需遍历即可快速取出元素数量
时间: 2024-07-29 17:46:52

redis数据结构存储Linked List设计细节(redis的设计与实现笔记)的相关文章

redis数据结构存储Dict设计细节(redis的设计与实现笔记)

说到redis的Dict(字典),虽说算法上跟市面上一般的Dict实现没有什么区别,但是redis的Dict有2个特殊的地方那就是它的rehash(重新散列)和它的字典节点单向链表. 以下是dict用到的结构: typedef struct dictEntry {//字典的节点 void *key; union {//使用的联合体 void *val; uint64_t u64;//这两个参数很有用 int64_t s64; } v; struct dictEntry *next;//下一个节点

Redis学习系列六ZSet(有序列表)及Redis数据结构的过期

一.简介 ZSet可以说是Redis中最有趣的数据结构了,因为他兼具了Hash集合和Set的双重特性,也是用的最多的,保证了value值的唯一性的同时,,同时又保证了高性能,最主要的是还可以给每个Value设置Source(权重),那么我们就可以通过权重进行排序,这在业务上是非常常见的,比如很多地方需要,比如我们需要对所有用户的数学成绩进行排序.对英语等等地例子比比皆是,那么通过ZSet,你将会得到一个响应速度非常快的过程.下面会介绍. ZSet的内部原理是通过跳跃列表来实现的,这里还是不想说太

Redis 数据结构与内存管理策略(下)

Redis 数据结构与内存管理策略(下) Redis 数据类型特点与使用场景 String.List.Hash.Set.Zset 案例:沪江团购系统大促 hot-top 接口 cache 设计 Redis 内存数据结构与编码 OBJECT encoding key.DEBUG OBJECT key 简单动态字符串(simple dynamic string) 链表(linked list) 字典(dict) 跳表(skip list) 整数集合(int set) 压缩表(zip list) Re

redis学习(二) redis数据结构介绍以及常用命令

redis数据结构介绍 我们已经知道redis是一个基于key-value数据存储的数据结构数据库,这里的key指的是string类型,而对应的value则可以是多样的数据结构.其中包括下面五种类型: 1.string 字符串 string字符串类型是redis最基础的数据存储类型.string是最基础的一种数据类型,其可以拓展为某种特定类型,例如普通文本,json字符串,二进制数据等等.就本质上来说,接下来要介绍的hash,list,set等其内部最基础的组成单位依然是string,只不过re

Redis—数据结构之SDS

Redis是一个Key Value数据库.Redis有5种数据类型:字符串.列表.哈希.集合.有序集合.而字符串的底层实现方法之一就是使用sds.以下描述中请读者注意区分sds是指简单动态字符串这一数据结构(用大写表示)还是sdshdr头部中buf数组的起始地址(用小写表示). SDS源码 如下源码所示. 根据要保存的字符串长度选用不同的头部大小,从而节省内存,注意sdshdr5与其他不同,下面会有介绍. SDS由两部分组成:sds.sdshdr.sds是一个char类型的指针,指向buf数组首

Redis数据结构之robj

本文及后续文章,Redis版本均是v3.2.8 我们知道一个database内的这个映射关系是用一个dict来维护的.dict的key固定用一种数据结构来表达,这这数据结构就是动态字符串sds.而value则比较复杂,为了在同一个dict内能够存储不同类型的value,这就需要一个通用的数据结构.针对不同的使用场景,这个通用的数据结构可以使用不同的数据结构实现,这样可以优化在不同场景下的效率.这个通用的数据结构就是robj(redisObject),也是本文主要探讨的redis中的对象是怎么实现

[转载] 十五分钟介绍 Redis数据结构

转载自http://blog.nosqlfan.com/html/3202.html?ref=rediszt Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.它起步较晚,发展迅速,目前已被许多大型机构采用,比如Github,看看谁在用它.本文翻译自Redis的一篇官方文档:A fifteen minute introduction to Redis data types方便感兴趣的朋友,快速介绍Redis的数据类型. 中英文对照

Redis数据结构之intset

本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis数据结构之robj>,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST, OBJ_SET,OBJ_ZSET,OBJ_HASH.集合对象set有着广泛的实际业务应用场景,它包含的元素无序并且不能重复及集合间的交.并.差等基础的操作.本篇就来说说Redis暴露给我们使用的set集合对象的底层实现-intset. 其实,可以理解为有序整型集合 intset是一个由整数组成的有序集合,

Redis内存存储结构分析

五竹,20110418 Redis: A persistent key-value database with built-in net interface written in ANSI-C for Posix systems 1 Redis 内存存储结构 本文是基于 Redis-v2.2.4 版本进行分析. 1.1 Redis 内存存储总体结构 Redis 是支持多key-value数据库(表)的,并用 RedisDb 来表示一个key-value数据库(表). redisServer 中有