
Redis底层实现
讨吃的讨吃了
一个普通人。
展开
-
redis底层数据结构-跳跃表(skiplist)
一、什么是跳跃表,如何理解它 ①生活中的例子,公交车快慢车问题 首先说个生活中的例子 ,公交车快慢车问题。 快车是站数少,停站少。慢车是逢站必停。当时我第一次见到快慢车的概念还以为是这个车跑的比较快。 正常来说,公交车分为快车和慢车。一般而言慢车可以通往目的地的每一站,而快车是只在部分站点停车。而快车又包含了慢车部分的人流量大的目的点。 所以对于我们乘客来说,我们如果想赶时间去某个地方,我们会查下地图最优线路,最快线路。一般情况下,我们会做几站快车,然后在换乘慢车到达目的地。 ②跳跃表与之的联系原创 2020-07-14 10:38:28 · 596 阅读 · 1 评论 -
跳跃表-转载
一、跳表的基本概念 1、跳表的定义 跳表(SkipList):增加了向前指针的链表叫做。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质是一种可以进行二分查找的有序链表。跳表在原有的有序链表上增加了多级索引,通过索引来实现快速查询。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 跳表是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树、AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LevelDB中都有用到。 2、跳表的详解 说明:本文转载 2020-07-14 09:38:45 · 325 阅读 · 1 评论 -
Redis底层数据结构之压缩列表(ziplist)
记录一下读《redis设计与实现》,所学到和所想到的 *压缩列表需要重点掌握的 ①压缩列表是一种为节约内存而开发的顺序性数据结构 ②压缩列表被用作列表键和哈希键的底层实现。 ③压缩列表可以包含多个节点,每个节点可以保存一个字节数组或者整数值 ④添加新节点到压缩列表或者从压缩列表中删除几点,可能会引发连锁更新操作,但这种操作出现几率不高。这种操作最坏的时间复杂度为On^2。 一、压缩列表概述 压缩列表是列表键和哈希键的底层实现之一。 ①在一个列表建只包括少量列表项,而且每个列表项要么是小.原创 2020-07-13 15:11:16 · 1193 阅读 · 1 评论 -
Redis底层数据结构之链表
一、在redis中列表的使用场景 ①链表key值底层实现之一是链表。当一个列表键包含了数量较多元素,又或者列表中包含元素字符串较长,Redis就会使用链表作为列表key值。 ②发布与订阅、慢查询、监视器等功能也用到了链表。 二、链表和链表节点实现 先看下listNode结构。 typedef struct listNode{ //前节点 struct listNode *prev; //后节点 struct listNode *next; //值 v...原创 2020-06-29 16:42:38 · 228 阅读 · 0 评论 -
Redis底层数据结构之SDS(simple dynamic string)
最近在找工作,一直问底层实现,接下来记录一下redis的底层实现。今天说下简单动态字符串,也就是SDS。 SDS是redis的核心数据。虽然简单,但特别重要。首先redis五种常用数据结构的Key值都是用SDS存储的,而不是简单的一个C语言字符串,下面看一下这个SDS是什么样子的。 1.SDS数据结构 struct sdshdr{ //字符串长度 int len; //buf数组中未使用的字节数量 int free; //字节数组,用于保存字符串 char buf[];..原创 2020-06-29 16:11:37 · 357 阅读 · 0 评论