- 博客(12)
- 资源 (9)
- 收藏
- 关注
原创 Redis学习笔记&源码阅读--跳跃表
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概念引子跳跃表这个概念在第一次接触时还是比较唬人的,我们先来聊聊它产生的背景。我们知道数组和链表的区别,数组是在内存上连续的且保存的数据一般是同类型的,随意我们可以通过指针进行随机访问,在做查询操作时就特别方便,这是它的优势,但是在做删除和新增时就略显笨重了,需要做大量的内存拷贝操作;相反,链表的内存并不是连续的,所以在新增和删除时都不需要拷贝内存,只需要做指针的改动操作就可以了,但是缺
2020-07-24 13:41:15
181
原创 Redis学习笔记&源码阅读--简单动态字符串
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概念简单动态字符串(Simple Dynamic Strings, SDS)是Redis的基本数据结构之一,用于存储字符串和整型数据。SDS兼容C语言标准字符串处理函数,且在此基础上保证了二进制安全。对于字符串,一般有两种保存方式,一种是使用’\0‘作为字符串的结束符,另一种是记录字符串的长度。SDS采用的是第二种方式来存储字符串,那么按照理解,SDS的结构大致如下所示:struct
2020-07-17 13:10:09
179
原创 Redis学习笔记&源码阅读--整数集合
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概念整数集合(intset)是一个有序的、存储整型数据的结构,当Redis集合类型的元素都是整数并且都处在64位有符号整数范围之内时,使用该结构体存储。在两种情况下,底层编码会发生转换。当元素个数超过一定数量之后(默认值为512),即使元素类型仍然是整型,也会将编码转换为hashtable;当增加非整型变量时,底层编码从intset转换为hashtable。整数集合在Redis
2020-07-13 13:12:41
144
原创 Redis学习笔记&源码阅读--字典-操作
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概述上文Redis学习笔记&源码阅读–字典-概念中我们已经介绍了字典的概念和源码层的结构,本节介绍对字典的各种基本操作。基本操作接下来结合源码看Redis是如何创建字典,以及对字典进行增删改查的。创建字典源码中创建字典的函数是dictCreate函数,源码如下:/*创建一个新的字典*/dict *dictCreate(dictType *type, vo
2020-07-11 15:02:59
147
原创 Redis学习笔记&源码阅读--字典间断遍历专题
非正文Redis中字典的间隔遍历的核心是reverse binary itreation,初步翻译为反转二进制迭代吧,反正别人也是这么翻译的????,这个算法很精妙,但是真的很难理解,单纯介绍这个主题就需要大量的篇幅,所以我把它抽离成一个专题,避免在我介绍字典操作的内容里占用大量的篇幅造成喧宾夺主的不良效果。我自己理解这个算法也借鉴了网上已有的很多博客和《Redis5设计与源码分析》,受益良多,我则是按照自己理解的角度来介绍和讲解这个算法,算是提供另一种视角吧,我也不敢保证从读者的食用效果。讲解这个
2020-07-11 14:34:56
232
原创 Redis学习笔记&源码阅读--字典-概念
申明概念字典主要是用来存储健值对的一种数据结构,详细的概念不赘述了,我相信你不是为了释义来看我的博客。在Redis中字典有如下特征:可以存储海量数据,键值对是映射关系,可以根据键以O(1)的时间复杂度取出或插入关联值。键值对中键的类型可以是字符串、整型、浮点型等,且键是唯一的。键值对中值的类型可为String、Hash、List、Set、SortedSet。《Redis5设计与源码分析》一书中对字典的核心组成进行了比较详细的讲解,大家有条件的建议去看看,我这里只是尝试简化梳理下。能够实现O
2020-07-02 08:59:19
149
原创 Redis学习笔记&源码阅读--压缩列表-操作
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概述上文Redis学习笔记&源码阅读–压缩列表-概念中我们介绍了我们压缩列表的概念和对应源码中结构体,本节主要介绍对ziplist的各种基本操作。基本操作创建ziplist创建一个新的ziplist我们在前一篇概念那篇文章中已经在介绍ziplist结构时讲解过一次了,这里再贴下源码,不再讲解。/* Create a new empty ziplist. */unsigne
2020-06-27 19:25:06
341
原创 Redis学习笔记&源码阅读--压缩列表-概念
概念Redis使用字节数组表示一个压缩列表,压缩列表结构示意如下所示:zlbyteszltailzllenentry1…entryXzlend各字段的具体含义如下:zlbytes:压缩列表的字节长度,占4个字节,因此压缩列表最多有2^32-1个字节。zltail:压缩列表尾元素相对于压缩列表起始地址的偏移量,占4个字节。zllen:压缩列表的元素个数,占2个字节。zllen无法存储元素个数超过65535(2^16-1)的压缩列表,必须遍历整个压缩列表才能获取到元素个数
2020-06-19 13:00:35
272
转载 以太网幀格式和幀大小
以太网(IEEE 802.3)帧格式:1、前导码:7字节0x55,一串1、0间隔,用于信号同步2、帧起始定界符:1字节0xD5(10101011),表示一帧开始3、DA(目的MAC):6字节4、SA(源MAC):6字节5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)6、数据:46~1500字节7、帧
2013-10-17 19:41:00
1565
转载 C语言字节对齐 --2013-05-08
原文:http://blog.csdn.net/21aspnet/article/details/6729724文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x0000000
2013-05-08 23:58:36
541
转载 PKG_CONFIG_PATH 解析 --2013-05-07
PKG_CONFIG_PATH这个环境变量,它是在安装了pkg-config后出现的其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本,库的版本,库的路径,等等这些信息只是在编译其间使用。你可以 ls /usr/lib/pkgconfig 下,会看到许多的*.pc,用文本编辑器打开 会发现类似下面的信息: prefix=/usr exec_p
2013-05-07 23:18:39
800
转载 /etc/ld.so.conf文件 作用 -2013-05-07
Linux 共享库 Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 —换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。 第二类是动态链接的可执行程序。 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执行程序是否为静
2013-05-07 23:07:07
554
线性规划在物流运输中数学模型及应用
2013-01-04
IIR数字滤波器及其MATLAB实现
2013-01-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人