【Redis快在哪?第一期】

很多人都知道Redis很快,但很多人不知道Redis快在哪?

一 基本原理

Redis“快”很大一部分原因在于它的基本原理。

  1. 因为Redis是建立在内存数据库中,所以它的操作都是在内存上面进行。
  2. 得益于Redis的键值对是由优秀的数据结构组成的。

二 底层数据结构

其实Redis底层数据结构有五种,分别是整数数组、双向链表、哈希表、压缩列表和跳表。

前面三种大家应该都知道,在这里就不一一讲解了,我们注重讲一下压缩列表和跳表

压缩列表

压缩列表是 Redis 数据结构之一,它是一种特殊的数据结构,可以同时支持列表和字典两种数据结构的操作。压缩列表可以看作是一种紧凑型的数组,它可以在内存中高效地存储一系列数据。

在压缩列表中,每个节点可以保存一个字节数组或整数值。节点之间通过特定的编码方式进行压缩和解压,以尽可能地减少内存占用。

压缩列表的表头包含三个字段,分别是 zlbytes、zltail 和 zllen。其中,zlbytes 表示整个压缩列表占用的字节数,zltail 表示压缩列表尾节点的偏移量,zllen 表示压缩列表中节点的数量。这些字段的存在使得在查找定位第一个元素和最后一个元素时,可以通过表头三个字段的长度直接定位,复杂度是 O(1)。

在压缩列表中,如果我们要删除一个元素,只需要将该节点的前一个节点的 next 指针指向该节点的下一个节点即可。如果要插入一个元素,我们可以先创建一个新的节点,然后将新节点的 next 指针指向原来的下一个节点,再将前一个节点的 next 指针指向新节点。这些操作的时间复杂度都是 O(1)

压缩列表虽然可以高效地支持列表和字典两种数据结构的操作,但它也有一些局限性。例如,压缩列表只能支持单个节点的插入和删除操作,无法支持批量操作;另外,由于节点大小的限制,压缩列表对于大型数据集的支持并不理想。
[图片]

跳表

由于有序链表只能逐一查找元素,导致操作起来非常缓慢,于是就出现了跳表。具体来说,跳表其实在链表的基础上,增加了多级索引,通过索引位置的几个跳转,实现数据的快速定位,它可以支持快速的查找、插入和删除操作,时间复杂度为 O(log n)。跳表通过在链表中增加多级索引的方式,减少了查找元素的时间复杂度。如下图所示:
[图片]

跳表是一种非常实用的数据结构,在 Redis、LevelDB 等多个流行的软件中得到广泛应用。

通过使用不同的数据结构,Redis 可以更好地适应不同类型的数据,并提供高效的数据操作,使得 Redis 在处理大量数据时具有非常高的性能,所以Redis为什么快?很大程度在数据结构上面。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值