文章目录前提:跳表跳表是不是很浪费内存??索引的动态更新列表(list)(1): 压缩列表(数据量小)(2): 链表(数据量大)字典(hash)(1)压缩列表(数据量小)(2)散列表(数据量大)集合(set)(1) 有序数组(就是排好序的数组)(2) 散列表 前提:跳表 先给出大体结构图: 时间复杂度:O(log(n)) 如何分析:(n) ->(n/2)->(n/4)->(n/8)-…(n/2... 作者:liushengxi_root 发表于 2019/04/08 20:44:27 原文链接 https://blog.csdn.net/liushengxi_root/article/details/88994749 阅读:24 继续阅读 >>


刘生玺 19/04/08 20:44:27
文章目录前言必要数据结构封装 epoll 的必要成员文件事件时间事件结构已就绪事件事件处理器的状态 (就是最主要的 aeEventLoop初始化事件处理器状态创建 listenfd 并加入 epoll执行主循环询处理事件 aeProcessEvents数据读写处理非活动连接 前言 因为 Redis 的网络模块是一个采用 epoll 的但线程模型, 阅读起来相对更加简单, 就先从这一部分入手 文章... 作者:weixin_36888577 发表于 2019/03/30 23:03:37 原文链接 https://blog.csdn.net/weixin_36888577/article/details/88920834 阅读:34 继续阅读 >>


吕子健 19/03/30 23:03:37
为什么要处理数据过期 1.过期设置为程序逻辑的一部分,所以为了保证逻辑正确(不读取到过期数据),不得不对缓存做数据过期处理 2.过期数据,对业务来说已是无用数据,但是却仍然占有服务资源(主要是内存和磁盘),故处理过期数据,将其删除可以使服务资源得到释放 处理过期数据的常用策略 策略 说明 优点 缺点 定时删除 根据键的过期时间设置定时器,触发超时及删除对应键 删除及时,内存友好 在... 作者:Shreck66 发表于 2019/03/19 16:35:46 原文链接 https://blog.csdn.net/Shreck66/article/details/88665882 阅读:87 继续阅读 >>


苗帅 19/03/19 16:35:46
redis 使用到的位域 今天在看redis源码的时候在3.0版本的redis.h 文件中发现了这样的几行代码,看了有趣,研究了一番,才发现这个东西就是c语言中的位域。 /* * redisObject Redis对象 */ typedef struct redisObject { unsigned type : 4; // 类型 unsigned encoding : 4; //... 作者:Holy_666 发表于 2019/01/20 21:32:19 原文链接 https://blog.csdn.net/Holy_666/article/details/86566590 阅读:72 继续阅读 >>


刘嘉辉 19/01/20 21:32:19
壹、sds (SDS)Simple Dynamic String, 从字面意思上来简单理解就是简单的动态字符,其为具有动态增加空间的能力,扩容不需要使用者担心。 好的咱们来看一下他的数据结构吧 这个版本是黄所注释的3.0版本 typedef char *sds; //注意,sds其实不是一个结构体类型,而是被typedef的char*,好处见下文 struct sdshdr { ... 作者:Holy_666 发表于 2018/12/12 10:44:08 原文链接 https://blog.csdn.net/Holy_666/article/details/84967117 阅读:58 继续阅读 >>


刘嘉辉 18/12/12 10:44:08
学习总结一下官方发布的C版本客户端 hiredis,了解hiredis 客户端大致实现细节。在理解代码之间需要了解通信协议的特点,我上一篇转载的文章已经有过介绍,大家可以去看一下。 hiredis 提供了同步、异步访问,异步 API 需要与一些事件库协同工作,主要看一下同步API的实现。 hiredis 与服务端通信的API比较简单,主要有这几个步骤: 建立连接 发送命令 等待结果并处理 ... 作者:Tanswer_ 发表于 2018/06/28 21:03:07 原文链接 https://blog.csdn.net/Tanswer_/article/details/80848182 阅读:2790 评论:1 查看评论 继续阅读 >>


杜肖孟 18/06/28 21:03:07
本文档翻译自: http://redis.io/topics/protocol 。 Redis 协议在以下三个目标之间进行折中: 易于实现 可以高效地被计算机分析(parse) 可以很容易地被人类读懂 网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。 客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。 请求 ... 作者:Tanswer_ 发表于 2018/06/28 17:41:22 原文链接 https://blog.csdn.net/Tanswer_/article/details/80846757 阅读:1076 继续阅读 >>


杜肖孟 18/06/28 17:41:22
没有代码的解释不是解释,没有deadline的任务不是任务,没有流程图或分享的源码阅读不是源码阅读,没有报告的性能测试不是性能测试。 —— 漠冰 曰这篇文章打算作为INFO命令的输出整理汇总,目前还未全部完成…1. 环境代码版本:redis-4.0.6 工具:本地用CLion打开,增加CMakeLists.txt就可以调试了 作者:yangbodong22011 发表于 2018/01/27 19:03:44 原文链接 https://blog.csdn.net/yangbodong22011/article/details/79182475 阅读:3035 继续阅读 >>


杨博东 18/01/27 19:03:44
定义 adlist.h typedef struct listNode{ struct listNode *prev; struct listNode *next; void *value; } 可以看出,redis的链表是一个双向链表,拥有前驱和后继,数据域为void型指针,意味着数据域可以指向需要的类型。 管理链表 adlist.h typedef struct list{ listNode *head; listNode *tail; unsigned long len; //节点复制函数 void *(*dup)(void *ptr); //节点释放函数 void (*free)(void *ptr); //节点比较函数 int (*match)(void *ptr,void *key); } 容易看出,为了管理链表,redis定义了一个结构体,会去存储链表头、尾、和长 继续阅读 >>


李余通 17/12/24 20:31:44
源码分析章节,我尽量使用原生的redis源码,不去看黄建宏的注释,提高自己阅读源码的能力,此外,redis版本还是3.0 源码下载,大家可以到这 http://download.redis.io/releases/ sdsnew typedef char *sds; sds sdsnewlen(const void *init, size_t initlen) { struct sdshdr *sh; //分配内存 if (init) { sh = zmalloc(sizeof(struct sdshdr)+initlen+1); } else { sh = zcalloc(sizeof(struct sdshdr)+initlen+1); } //分配失败返回NULL if (sh == NULL) return NULL; sh->len = initlen; s 继续阅读 >>


李余通 17/12/19 22:48:51