博客主页:?看看是李XX还是李歘歘??每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活
原创 2022-06-29 17:52:44
925阅读
1. 什么是跳跃表?增加了向前指针的链表叫作跳表跳表全称叫做跳跃表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。(摘自百度百科)更多关于跳跃表的介绍可阅读:什么是跳跃表2. Redis中跳跃表的数据结构 //zskiplistNode:跳跃表的一个节
转载 2023-10-12 21:10:18
236阅读
何为跳表跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。跳表详解有序链表   考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍历链表,直到查找到元素为止。上述这个链表是有序的,但是不能使用二分查找,是不
背景:相信大家都知道排行榜,在很多场景里都需要用到排行榜功能,尤其是游戏中!之前在了解排行榜实现机制的时候,在网上看得最多的答复便是使用redis的有序集合实现。于是深入了解了一下redis中的有序集合。redis中的有序结合(sorted set)是一种线性结构,底层是用有序链表实现的,但是对链表增加的“索引”,并且对索引进行了分层,跳表每层散落的节点数不同,查找过程中通过索引向下层跳转,最终落
转载 2024-04-19 21:20:35
36阅读
一、数据结构与算法——跳表什么是跳表跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集(见右边的示意图)。一开始时,算法在最稀疏的层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间。这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需
转载 2024-06-11 11:14:34
88阅读
Redis有序集合(Zset)通过跳表+哈希表的组合实现高效操作。跳表通过多级索引实现O(logn)的查找、插入和删除,相比红黑树更简单高效,内存占用更少。Redis在元素较少时使用压缩列表节省空间,元素较多时自动切换为跳表+哈希表。跳表的优势包括实现简单、内存效率高、缓存友好、区间查询高效以及并发友好,使其成为Redis有序集合的理想底层结构。这种设计支撑了排行榜、优先级队列等常见应用场景。
本文是《Redis内部数据结构详解》系列的第六篇。在本文中,我们围绕一个Redis的内部数据结构——skiplist展开讨论。Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分
Redis众多数据结构中,有序集合(Zset)是一个非常强大的工具,它不仅支持集合的唯一性,还能根据分数进行自动排序。当我们使用zadd、zrange、zrank等命令时,背后正是一个高效的数据结构在支撑——跳表(Skip List)。今天,我们就来深入探索RedisZset底层实现,重点剖析 ...
转载 21天前
378阅读
目录一、跳跃表1.1 跳跃表的实现二、整数集合2.1升级2.2降级三、压缩列表四、redis 对象 一、跳跃表跳跃表(skiplist)是一种随机化的数据结构,由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出,是一种可以于平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数
跳跃列表(skiplist)是一种有序的数据结构,它通过在每个节点维护多个指向其他节点的指针,我们可以平均O(logN) 的时间复杂度快速访问节点,大部分情况下它的性能可以和平衡树相媲美,不过实现起来更为简单。跳跃列表是 Redis 中有序集合的一种实现方式,在有序集合的元素数量较多或者是元素成员长度较长时,Redis 就会使用跳跃列表加字典来存储元素。大家都知道 zset 每一个 value 都
1. 编码zset的编码有ziplist和skiplist两种。 底层分别使用**ziplist(压缩链表)和skiplist(跳表)**实现。什么时候使用ziplist什么时候使用skiplist?当zset满足以下两个条件的时候,使用ziplist:保存的元素少于128个保存的所有元素大小都小于64字节不满足这两个条件则使用skiplist。 (注意:这两个数值是可以通过redis.conf的
Zset 有两种编码格式 , 一种是ziplist(双向链表的形式), skiplist(跳跃表的形式),Zset会根据相应的规则来选择编码格式,一、ziplist (压缩列表)1.条件 :元素个数小于128个元素的长度小于64ziplist采用的是双向的链表的结构实现, 且是一个特殊的双向链表,为啥特殊呢,因为链表的设计采用了连续的内存空间。2.结构:<zlbytes> <zl
转载 2023-08-17 10:56:29
57阅读
Redis中的跳表redis 数据类型 zset 实现有序集合,底层使用的数据结构是跳表。源码在 src/t_zset.c 文件中,相关数据结构的定义在 src/server.h 文件中。(4.0版本)元素有序的时候,如果是数组,可以通过二分查找来提速;如果是链表,如何提速? => 跳表,插入/删除/搜索 都是O(logn)第一层索引 n/2 个节点,第二层 n/4 个节点,第三层 n/8,
转载 2023-10-09 11:30:48
61阅读
# Mysql索引和redis跳表:提升数据查询效率的两种方式 ## 简介 在数据库和缓存中,提升数据查询效率是一个非常重要的课题。Mysql索引和Redis跳表(Skip List)都是常用的解决方案之一。本文将介绍Mysql索引和Redis跳表的原理和使用方法,并给出代码示例。 ## Mysql索引 ### 索引的作用 在数据库中,索引是一种数据结构,用于加快数据的检索速度。它类似于
原创 2023-09-05 07:56:58
51阅读
在树形结构中,常见的平衡树有AVL树和红黑树,但是由于AVL树过于平衡,导致维护平衡所需的代价过大,使用的不多,不过其中几种旋转算法还是值得学习的。取而代之的是较为平衡的红黑树,STL中的map和set都是采用红黑树实现的,插入和查找效率为O(logN)。而跳表也是一种较为平衡的数据结构,与红黑树不同的是,它是链状结构而非树形结构,不过,跳表的插入查找效率也为O(logN),和红黑树有一拼,而且最
转载 2024-06-12 21:49:59
58阅读
简介我们知道 Redis 中有五种基本结构,其中有一个叫 有序列表zset 的数据结构,它类似于 Java 中的 SortedSet 和 HashMap 的结合体,一方面它是一个 set 保证了内部 value 的唯一性,另一方面又可以给每个 value 赋予一个排序的权重值 score,来达到 排序 的目的。它的内部实现就依赖了一个叫做 「跳跃列表」的数据结构为什么使用跳跃表因为 zset 要支
转载 2024-01-20 01:18:57
90阅读
## Redis zset跳表层数会变化吗 ### 1. 简介 在介绍Redis zset跳表层数是否会变化之前,首先需要了解Redis的有序集合(sorted set)以及跳表(skip list)的基本概念。 Redis的有序集合是一种数据结构,它能够存储一组有序且不重复的元素。每个元素被称为成员,每个成员都会关联一个分数(score)作为排序依据。有序集合使用跳表作为底层数据结构来实现
原创 2023-09-15 11:06:23
93阅读
# Redis Zset 压缩表转跳表的条件 ## 1. 整体流程 Redis的有序集合(Sorted Set)数据结构在实现上使用了压缩表(ziplist)和跳表(skiplist)两种数据结构。其中,当有序集合元素数量较少时,Redis会使用压缩表作为内部存储结构;当元素数量超过一定阈值时,Redis会自动将压缩表转换为跳表。 下面是整个过程的流程图: ```mermaid erDia
原创 2023-10-14 04:45:26
138阅读
概念Redis作为一个开源的用C编写的非关系型数据库,基于优秀的CRUD效率,常用于软件系统的缓存,其本身提供了以下五种数据格式:string:字符串list:列表hash:散列表set:无序集合zset:有序集合接下来我们就要针对这五种数据结构,来分析其底层的结构这里选用的版本是redis-5.0.4,所以可能有很多地方和如今网络上的其他博文不太一致,不同的地方我会在文中指出string因为re
含义:压缩列表是一块连续的内存空间,元素之间紧挨着存储,没有任何冗余空隙。内部结构 :  struct ziplist<T> { int32 zlbytes; // 整个压缩列表占用字节数 int32 zltail_offset; // 最后一个元素距离压缩列表起始位置的偏移量,用于快速定位到最后一个节点 int16 z
  • 1
  • 2
  • 3
  • 4
  • 5