首页
学习
活动
专区
工具
TVP
发布

Redis源码学习系列

专栏成员
8
文章
19949
阅读量
64
订阅数
Redis源码学习之字符串对象
前文中提到,Redis的字符串对象的底层数据结构有三种,分别是整数编码、EMBSTR编码和SDS编码。在不同使用场景下进行相互切换,起到节约内存的作用。
里奥搬砖
2018-11-14
1.1K0
Redis源码学习之列表对象
列表对象的底层实现可以是【压缩列表】或者【双端链表】,Redis会通过用户对于压缩列表单个节点值长度(list_max_ziplist_value)和键值对个数(list_max_ziplist_entries)的配置进行选择。
里奥搬砖
2018-11-14
7880
Redis源码学习之对象系统
在前面的文章中,我介绍了Redis的底层数据结构,但Redis对外提供的命令并没有直接使用它们,而是基于它们构建更高级的数据对象,总共包括5中对象类型,分别为【字符串对象】、【列表对象】、【哈希对象】、【集合对象】和【有序集合对象】,Redis实现对象系统的思想是:每一种对象都使用多种底层数据结构进行实现,具体使用哪种数据结构基于使用场景进行选择,并且可以在触发条件时进行转换。
里奥搬砖
2018-10-16
5160
Redis源码学习之压缩列表
压缩列表是列表对象、哈希对象和有序集合对象的底层实现之一。以列表对象为例,当列表节点都是比较小的整数或者比较短的字符串的时候,Redis就会选择压缩列表来做底层实现。其实,压缩列表就是一个字节数组,我们知道,在虚拟存储器中以连续的形式存放数据,可以避免产生内存碎片,提高存储器利用率,而压缩列表正是因此而设计的。当然,这种存储结构也有其局限性,这也是为什么高级对象是有选择的使用它的原因。
里奥搬砖
2018-10-11
5660
Redis源码学习之整数集合
整数集合在Redis中是集合对象的底层存储之一,当一个集合对象的元素都是整数类型且元素数量不多(不超过512个)时,就会使用整数集合。
里奥搬砖
2018-10-11
6430
Redis源码学习之跳表
跳跃链表简称为跳表(SkipList),它维护了一个多层级的链表,且第i+1层链表中的节点是第i层链表中的节点的子集。跳表作为一种平衡数据结构,经常和平衡树进行比较,在大多数场景下,跳表都可以达到平衡树的效率(查询节点支持平均O(lgN),最坏O(N)的复杂度),但实现和维护起来却比平衡树简单很多。(跳跃列表由 William Pugh 发明。他在 Communications of the ACM发表了《Skip lists: a probabilistic alternative to balanced trees》,在其中详细描述了他的工作)
里奥搬砖
2018-10-11
14.1K3
Redis源码学习之字典
在字典结构体中,包含了一组字典函数(dictType),通过封装的方法处理对应的操作,通常在字典初始化的时候对其进行配置。
里奥搬砖
2018-10-11
1.6K0
Redis源码学习之链表
Redis实现的是双端无环链表,pre指针指向其前置节点,next指针指向其后置节点,表头节点的pre属性和表尾节点的next属性为nil,节点值的类型为interface{},从而达到保存不同类型值的目的。
里奥搬砖
2018-10-11
6530
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档