Redis实现原理(1)--链表

链表是Redis中使用非常广泛的一种数据结构,很多地方如List结构底层就是用链表实现的。

链表的定义在头文件adlist.h 中,很常见的双向链表,结构如下:

 1 // 链表节点
 2 typedef struct listNode {
 3     struct listNode *prev; //指向前一个节点
 4     struct listNode *next; //指向后一个节点
 5     void *value; //值域
 6 } listNode;
 7 // 链表遍历迭代指针
 8 typedef struct listIter {
 9     listNode *next; //下一节点指针
10     int direction; // 方向
11 } listIter;
12
13 // 链表结构
14 typedef struct list {
15     listNode *head; //链表头指针
16     listNode *tail; //链表尾指针
17     void *(*dup)(void *ptr); //节点值域复制函数指针
18     void (*free)(void *ptr); //节点值域释放函数指针
19     int (*match)(void *ptr, void *key); //节点值域比较函数指针
20     unsigned long len; //链表长度
21 } list;

Redis实现原理(1)--链表,布布扣,bubuko.com

时间: 2024-08-07 21:03:21

Redis实现原理(1)--链表的相关文章

Redis实现原理(2)--字典

1.   Dict 2.1 数据结构定义dict.h // 哈希表结构 typedef struct dictht { dictEntry **table; //哈希表数组指针 unsigned long size; //哈希表大小 unsigned long sizemask; //掩码,hash时用到 unsigned long used; //已有节点的数量 } dictht; // 哈希表节点结构 typedef struct dictEntry { void *key; union {

全面剖析Redis Cluster原理和应用

全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式.异步复制.客户端重定向等设计,而牺牲了部分的一致性.使用性. 水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点. 可用性:在Cl

学习笔记-Redis设计与实现-链表

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过删除节点来灵活地调整链表地长度. 当一个列表键包含了数量比较多地元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现. 出了链表键之外,发布与订阅.慢查询.监视器等功能也用到了链表,Redis服务器本身还使用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区(Output buffer) 3.1 链表和链表节点的实现 Redis的链表实现的特性总结如下: 双端:链表节点带有

Redis核心原理

Redis系统介绍: Redis的基础介绍与安装使用步骤:https://www.jianshu.com/p/2a23257af57b Redis的基础数据结构与使用:https://www.jianshu.com/p/c95c8450c5b6 Redis核心原理:https://www.jianshu.com/p/4e6b7809e10a Redis 5 之后版本的高可用集群搭建:https://www.jianshu.com/p/8045b92fafb2 Redis 5 版本的高可用集群的水

基于centos 7的Redis群集原理及配置

博文大纲:一.Redis群集原理二.Redis群集架构细节三.redis-cluster选举四.部署Redis群集环境 关于Redis的性能调优参数的说明,可以参考博文:centos 7之Redis数据库详解及参数调优一.Redis群集原理: 1)Redis集群架构: Redis Cluster采用虚拟槽分区,将所有的数据根据算法映射到0~16384整数槽内 Redis Cluster是一个无中心的结构 每个节点都保存数据和整个集群的状态2)集群角色 Master:Master之间分配slots

《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis哨兵原理及持久化机制 在这个系列里,我会整理一些面试题与大家分享,帮助年后和我一样想要在金三银四准备跳槽的同学.我们一起巩固.突击面试官常问的一些面试题,加油!! <[面试突击]— Redis篇>--Redis数据类型?适用于哪些场景? <[面试突击]— Redis篇>--Redis的线程模型了解吗?为啥单线程效率还这么

全面剖析Redis Cluster原理和应用 (转)

1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式.异步复制.客户端重定向等设计,而牺牲了部分的一致性.使用性. 水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点. 可用性:在Cluster推出之前,可用性要靠Sentinel

mongodb和redis设计原理简析

转自:http://blog.csdn.net/yangbutao/article/details/8309539 redis: 1.NIO通信 因都在内存操作,所以逻辑的操作非常快,减少了CPU的切换开销,所以为单线程的模式(逻辑处理线程和主线程是一个). reactor模式,实现自己的多路复用NIO机制(epoll,select,kqueue等) 单线程处理多任务 2.数据结构 hash+bucket结构,当链表的长度过长时,会采取迁移的措施(扩展原来两倍的hash表,把数据迁移过去,exp

Redis 复制原理及分析

1.测试 见master-slave测试帖 2 原理 第一次.Slave向Master同步的实现是: Slave向Master发出同步请求(发送sync命令),Master先dump出rdb文件,然后将rdb文件全量传输给slave,然后Master把缓存的写命令转发给Slave,初次同步完成.第二次.以及以后的同步实现是:        Master将变量的快照直接实时依次发送给各个Slave.        但不管什么原因导致Slave和Master断开重连都会重复以上两个步骤的过程.