![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 89
四五又十
这个作者很懒,什么都没留下…
展开
-
一套打通Redis(3)--sorted set的底层实现跳跃表、整数集合
一、跳跃表 首选,思考,那种数据结构在插入、删除、查找等操作上性能比较优呢? 我们知道,数组的优点是支持随机取值,但是如果是插入数据的话,首先需要查找到数据,考虑使用二分查找那么时间复杂度就是O(logn),找到数据以后进行插入因为数组的空间是连续的需要将数值进行移动,这个过程的时间复杂度就是O(n),所以总时间复杂度是O(n) 链表的优点是插入很快速,对于插入操作时间复杂度是O(1),但是因为链表不支持二分查找那么定位到一个元素的位置需要的时间复杂度就是O(n),所以总体时间复杂度就是O(n) 考虑,平衡原创 2021-04-27 15:04:10 · 150 阅读 · 0 评论 -
一套打通Redis(1)--字符串的底层实现 简单动态字符串SDS
参考《Redis设计与实现》 一、什么是SDS Redis是使用C语言进行编写,大家都知道C语言对于字符串有自己的字符类型char[],但是Redis并没有采用C语言自带的字符类型,而是自己构建了动态字符串的抽象类型 在github上下载到Redis的源码,查看sds.h文件,发现了如下定义 struct __attribute__ ((__packed__)) sdshdr5 { unsigned char flags; /* 3 lsb of type, and 5 msb of string原创 2021-04-21 17:13:40 · 113 阅读 · 1 评论 -
一套打通Redis(2)--列表的底层实现-链表、压缩链表与快速列表
参考《Redis的设计与实现》 一、链表 链表提供高效的节点重排能力,以及顺序性的节点访问方式,是一种非常常用的数据数据结构,但是在C语言中并没有自己的链表实现,所以Redis自己设计了一个链表实现。 在Redis中list类型使用到了链表类型,链表中的每个节点保存了一个整数值,除此之外,发布与订阅、慢查询、监视器这些功能也使用到了链表,所以链表对于Redis来说是非常重要的结构 在adList.h/listNode下定义了链表每个节点的信息 typedef struct listNode { st原创 2021-04-22 17:06:28 · 436 阅读 · 0 评论