上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页
摘要: Set是Redis中的单列集合,满足下列特点: 不保证有序性 保证元素唯一(可以判断元素是否存在) 求交集、并集、差集 以上操作,都需要判断元素是否存在,因此可以看出,Set对查询元素的效率要求非常高 Set是Redis中的集合,不一定确保元素有序,可以满足元素唯一、查询效率要求极高。 为了查询效率 阅读全文
posted @ 2024-03-04 14:38 蓝海的bug本 阅读(4) 评论(0) 推荐(0) 编辑
摘要: List Redis的List类型可以从首、尾操作列表中的元素: 哪一个数据结构能满足上述特征? LinkedList: 普通链表,可以从双端访问,内存占用较高,内存碎片较多 ZipList: 压缩列表,可以从双端访问,内存占用低,存储上限低 QuickList: LinkedList+ZipLis 阅读全文
posted @ 2024-03-01 16:24 蓝海的bug本 阅读(2) 评论(0) 推荐(0) 编辑
摘要: String是Redis中最常见的数据存储类型: 其基本编码方式是RAW,基于简单动态字符串(SDS)实现,存储上限为512mb。 RedisObject的头和SDS是两个独立的内存空间 如果存储的SDS长度小于44字节,则会采用EMBSTR编码,此时object head与SDS是一段连续空间。申 阅读全文
posted @ 2024-02-29 17:08 蓝海的bug本 阅读(5) 评论(0) 推荐(0) 编辑
摘要: RedisObject redis中的任意数据类型的键和值都会封装为一个RedisObject,也叫做Redis对象。 Redis对象头部占16个字节 (不包含指针指向的内存空间),所以大量数据使用的情况下,不推荐使用OBJ_STRING类型存储,用OBJ_LIST更好 Redis的编码方式 阅读全文
posted @ 2024-02-28 14:16 蓝海的bug本 阅读(10) 评论(0) 推荐(0) 编辑
摘要: SkipList SkipList(跳表)首先是链表,但与传统链表相比有几点差异: 元素按照升序排列存储 节点可能包含多个指针,指针跨度不同(最多允许32级指针,跨度成倍数递增) SkipList的特点: 跳跃表是一个双向链表,每个节点都包含score和ele值 节点按照score值排序,score 阅读全文
posted @ 2024-02-27 15:23 蓝海的bug本 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办? 为了缓解这个问题,我们必须限制ZipList的长度和entry大小。 问题2:但是我们要存储大量数据,超出了ZipList最佳的上限怎么办? 我们可以创建多个ZipList来分片存储数据。 问 阅读全文
posted @ 2024-02-26 15:38 蓝海的bug本 阅读(6) 评论(0) 推荐(0) 编辑
摘要: ZipList是一种特殊的“双端链表”,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1)。 ZipListEntry ZipList中的Entry并不像普通链表那样记录前后节点的指针,因为记录两个指针要占用16个字节,浪费内存。而是采用了下面的结构 阅读全文
posted @ 2024-02-23 16:09 蓝海的bug本 阅读(18) 评论(0) 推荐(0) 编辑
摘要: redis的键和值的映射关系是通过Dict来实现的。 Dict由三部分组成,分别是哈希表(DictHashTable)、哈希节点(DictEntry)、字典(Dict)。 size的大小总是2的N次方 sizemask的大小是size-1 used因为哈希的存储特性(不同元素相同的哈希值,即哈希冲突 阅读全文
posted @ 2024-02-22 14:40 蓝海的bug本 阅读(4) 评论(0) 推荐(0) 编辑
摘要: IntSet IntSet是redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 可能会有疑惑,int8_t 的数组contents只有1个字节,怎么可能存的下数组,其实这里的contents存储的只是指向真正数组的指针。 IntSet的取值范围大小,实际上是由e 阅读全文
posted @ 2024-02-21 13:59 蓝海的bug本 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 字符串是redis最常见的数据结构,但redis并没有直接使用C语言的字符串,是因为C语言本身其实是没有字符串的,所谓的字符串其实是字符数组(Java语言中的字符串是一个对象),所以C语言的字符串有很多问题: ① 获取字符串长度需要通过运算 C语言的字符串数组都是以’\0’结尾,这是一个字符串的结束 阅读全文
posted @ 2024-02-20 15:10 蓝海的bug本 阅读(41) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页