Redis
红橙呀
Java程序员,欢迎关注我的公众号:红橙呀
展开
-
Redis底层数据结构——压缩列表
压缩列表是什么 Redis 中的压缩列表是由一系列特殊编码的连续内存块组成的顺序型数据结构。列表中每个节点可以存储一个字节数组或者一个整数值。 它的存在主要是为了节约内存。 压缩列表应用场景 压缩列表在 Redis 中主要作为了 List 列表和 Hash 哈希两种数据结构的底层实现之一。 在 List 列表中,要是列表中的存储元素数量少且每个元素是小的整数值或者长度较短的字符串,那么列表将使用压缩列表结构作为底层实现。 在 Hash 哈希中,要是哈希中的存储键值对数量少且每个键值对的键和值是小的整数值或者原创 2020-12-16 22:45:31 · 340 阅读 · 0 评论 -
Redis底层数据结构——整数集合
整数集合是什么 Redis 中的整数集合 intset 是用来保存多个不重复的整数值且有序的集合抽象数据结构,可以保存类型为 int16-t 、int32-t 或者 int64-t 的整数值。 整数集合应用场景 整数集合在 Redis 中作为了集合 Set 数据结构的底层实现之一。 当一个集合中的元素都是整数值,且元素不多的时候,整数集合就会作为集合 Set 的底层实现。 整数集合结构内容 整数集合结构的具体代码: typedef struct intset { // 编码方式原创 2020-12-15 22:44:44 · 340 阅读 · 0 评论 -
Redis底层数据结构——跳跃列表
跳跃列表是什么 跳跃列表 skiplist 是一种有序的数据结构。它在设计上,是通过每个节点中维持多个指向其他节点的指针,达到快速访问节点的效果。 跳跃列表可以在时间复杂度为平均 O(logN) 或者最坏 O(N)两种情况下去查找节点,而且可以通过顺序性操作来批量处理了节点。 跳跃列表应用场景 双向链表、SDS、字典等数据结构都被较广泛地应用在了 Redis 的不同地方,而 Redis 中使用到跳跃列表的地方只有两个,一个是 Redis 的 Zset 数据类型,另一个是作为 Redis 集群节点中用作内部原创 2020-12-13 23:01:58 · 285 阅读 · 0 评论 -
Redis底层数据结构——字典
在字典中,一个键 key 和一个值 value 进行关联,通过这样的关系,称他们为键值对。而字典的内部数据结构基本是由多个键值对组成的。 Redsi 使用 C 语言作为实现,但 C 语言不像其他大多语言把字典的数据结构内置,所以 Redis 实现了自己的专属字典结构。 字典应用场景 字典基本在 Redis 中是应用最广泛的,比如 Redis 的数据库就使用了字典作为了自己的底层实现,我们平时对数据库的增删改查都是建立在对字典的操作之上的。 还有 Redis 经常使用的数据类型:Hash , Zset 也都使原创 2020-12-12 02:45:37 · 388 阅读 · 0 评论 -
Redis底层数据结构-双向链表
Redis 使用了 C 语言编写,但因 C 语言是没有内置链表这种结构的,所以 Redis 使用了双向链表结构作为自己需要的实现。 众所周知,链表结构的好处在于不需要连续的的内存空间,以及在插入和删除的时间复杂度是 O(1) 级别的,效率较高,但比起数组它的缺点在于,查询效率上没有那么的高。 双向链表内容 Redis 中一个双向链表节点的样子: 具体代码 /* * 双向链表节点 */ typedef struct listNode { // 前置节点的指针 struct li原创 2020-12-10 00:32:23 · 310 阅读 · 0 评论 -
Redis底层数据结构——SDS
SDS 是什么 Redis 底层的程序语言是由 C 语言编写的,C 语言默认字符串则是以空字符结尾的字符数组(简称 C 字符串)。但 Redis 默认的字符串并非 C 字符串,而是名为 SDS ( Simple Dynamic String )简单动态字符串的抽象结构。 Redis 采用一段连续的内存空间来存储 SDS 结构,具体结构如下图所示,free 代表指这个字符串剩余可用空间的长度,而 len 代表这个字符串已占用空间的长度,buf [] 就是字符数组。 下面是一个字符串为 ‘Redis’ 在 S原创 2020-12-08 22:54:35 · 545 阅读 · 0 评论