Redis的五种常用数据结构以及其底层实现

1.字符串

字符串作为Redis中最基础的数据结构,他存储的值可以是任何东西,可以是字符串,数字,二进制,但是字符串存储的值不能超过512M

在Redis中字符串的底层编码是根据值进行改变的

  • 当存储的字符串是一个数字的时候那么底层编码就是一个int
  • 当存储的字符串是一个小于39字节的字符串是用的是短字符串而大于等于39字节时用的就是长字符串

2.哈希

在Redis中所有的数据都是以键值对的方式存储的,那么哈希在Redis中指的是值以键值对的方式进行存储

在Redis中哈希的底层编码是由ziplist和hashtable实现的

  • 当哈希类型的元素小于512个并且存储的值小于64字节的时候使用的就是ziplist
  • 反之使用的是hashtable
  • 当存储的元素不满足ziplist的存储条件时**(元素小于512个并且存储的值小于64字节)**,此时读写效率就会下降,那么这个时候就会用hashtable来进行底层编码,使得读写效率变成 O(1)

ziplist

  • ziplist的存储空间是一整块的,连续的空间,所有的元素都紧挨的,没有冗余的间隙。每当有元素要新增的时候,添加到ziplist的尾部

3.列表

Redis中列表是用于存储多个有序的字符串的,这些字符串被称作元素,一个列表最多可以存储2^32 - 1个元素。这些元素是有序的,同时这些元素也是可以重复的。

在列表中,底层编码是由ziplist和链表实现的

  • 同样的, 当哈希类型的元素小于512个并且存储的值小于64字节的时候使用的就是ziplist
  • 当存储的元素不满足ziplist的存储条件时就会使用链表进行底层编码

4.集合

列表不同的是集合是用于存储多个无序的并且不能重复的元素

在集合中,底层是由整数集合和hashtable来实现的

  • 当存储到元素小于512个并且元素都是整数的时候,使用的就是整数集合进行底层编码
  • 当不满足整数集合的存储条件的时候就会使用hashtable进行底层编码,此时hashtable的键就是我们存储的元素,而值则都为null

5.有序集合

相比较与集合,有序集合增加了分数,帮助集合来进行排序操作,提供了指定分数,元素范围查询,计算排名等等操作

在有序集合中,底层编码是由ziplist和跳表进行实现的

  • 还是一样,当存储的元素小于512个并且存储的值小于64字节的时候使用的就是ziplist
  • 反之就使用跳表进行底层编码,时间复杂度为O(logN)

相关推荐

  1. Redis数据结构以及底层实现

    2024-01-28 19:10:04       54 阅读
  2. 二、Redis数据类型-String

    2024-01-28 19:10:04       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 19:10:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 19:10:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 19:10:04       82 阅读
  4. Python语言-面向对象

    2024-01-28 19:10:04       91 阅读

热门阅读

  1. 后端热门推荐商品接口实现

    2024-01-28 19:10:04       50 阅读
  2. Windows 下的 OpenVPN 安装

    2024-01-28 19:10:04       45 阅读
  3. shell练习

    2024-01-28 19:10:04       47 阅读
  4. C++从零开始的打怪升级之路(day23)

    2024-01-28 19:10:04       59 阅读
  5. python使用函数求余弦函数的近似值

    2024-01-28 19:10:04       52 阅读
  6. 并行计算工具 MPI 简单教程

    2024-01-28 19:10:04       53 阅读
  7. 2024年1月27日

    2024-01-28 19:10:04       57 阅读
  8. 初等数论,LeetCode 365. 水壶问题

    2024-01-28 19:10:04       62 阅读
  9. Vue——vue3拖拽库Sortablejs

    2024-01-28 19:10:04       58 阅读
  10. C: AES对称加密算法代码

    2024-01-28 19:10:04       56 阅读
  11. QT笔记 - QToolButton triggered(QAction *)不触发问题

    2024-01-28 19:10:04       53 阅读
  12. 初识C语言

    2024-01-28 19:10:04       66 阅读