- 博客(5)
- 收藏
- 关注
原创 redis 源码系列(5):能省一点是一点 --- intset
整数是计算机程序打交道最多的数据类型之一,对整数集合的存储和检索,往往会对程序的性能有至关重要的影响。 redis 中用 zset 数据结构来处理整数集合(去重),并使用了一定的手段来优化器内存占用,同时又可以以 O(logN) 的时间复杂度来查找数据(ziplist 是 O(N)),而且可以以 O(1) 时间复杂度索引 set 内的某个位置的值。但是因为其底层存储是一个数组,所以插入和删除的时间...
2019-12-31 00:15:17 175
原创 redis 源码系列(4):通用双向链表 --- list
今天我们来学习一下 redis 中 通用双向链表 list 的实现,涉及到的代码有 src/adlist.h src/adlist.c 首先来看一下主要结构体的定义,有 node,iterator、list 三个 typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct list...
2019-12-27 21:33:20 160
原创 redis 源码系列(3):最不像链表的链表 --- ziplist
本文讲解 redis 中的 ziplist 数据结构。涉及到的代码文件有 src/ziplist.c src/ziplist.h 关于 ziplist 的实现,源代码中作者添加了非常详细明了的注释,这些注释会成为我们后面学习这份代码的臂助。 what /* *The ziplist is a special encoded dually linked list that is designed ...
2019-12-27 00:22:41 165
原创 redis 源码系列(2):一看就懂的 string 实现 --- sds
操纵字符串(string)对于大多数的程序,都是一项主要工作。但是 c 语言中没有内置 string 类型,所以 redis 封装了自己的 string 类型 sds。今天我们就看一下 redis 中的 string 是如何实现的。 其对应的代码在 src/sds.h 和 src/sds.c 中。 柔性数组 在分析 redis 的字符串实现前,我们先岔开话题聊一下柔性数组。 柔性数组或者叫做 Ar...
2019-12-24 13:00:59 171
原创 redis 源码系列(1):船新的渐进式 hash 表 --- dict
今天我们来分析一下 redis 中的 dict(hashtable)的实现原理 redis dict 首先来看几个重要的结构体定义 // hash table entry typedef struct dictEntry { void *key; union { void *val; uint64_t u64; int64_t s64; } v; // red...
2019-12-23 15:47:00 169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人