Redis 的数据结构和内部编码

这篇具有很好参考价值的文章主要介绍了Redis 的数据结构和内部编码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis的 5 种数据类型

Redis 的数据结构和内部编码,Redis,redis,数据结构,数据库

Redis 底层在实现上述数据结构的时候,会在源码层面,针对上述实现进行 特定的优化 ,来达到节省时间/节省空间效果
特定的优化:内部的具体实现的数据结构,在特定场景下,不是其对应的标准数据结构,而是使用别的数据结构实现,不过仍然保证时间复杂度符合要求
编码方式:redis 数据结构的底层实现
同一个数据类型,背后可能的编码实现方式是不同的,会根据特定场景优化



数据类型对应的内部编码


数据结构 内部编码
string 1.raw
2.embstr
3.int
hash 1.hashtable
2.ziplist
list 1.linkedlist
2.ziplist
set 1.hashtable
2.intset
zset 1.skiplist
2.ziplist

String

1. raw

最基本的字符串.的实现,底层是一个C++的 char数组,类似于或者Java中的 byte数组

2. embstr

针对短字符串进行的特殊优化

3. int

redis 用来实现一些"计数"这样的功能 ,value 为一个整数的时候,此时 redis 会直接使用 int 来保存字符串


hash

1. hashtable

最基本的哈希表

2.ziplist

在哈希表里面元素比较少的时候,就会优化成 ziplist ,通过压缩列表,来够节省空间;
由于元素过少,通过遍历,时间复杂度还是可以认为是 O(1)
压缩原因:当对应的是 hash 的 key 特别多,但是每个 hash 又不大的情况下,就去压缩,压缩之后让整体占用更小的内存


list

1.linkedList

链表

2.ziplist

压缩链表

从 redis 3.2 开始,引入了新的实现方式 quicklist,同时兼顾了linkedlist和ziplist的优点;
quicklist 就是一个链表,每个元素又是一个ziplist,把空间和效率都兼顾到;
quicklist类似于C++中的std:deque


set

1.hashtable

最基本的哈希表

2.intset

针对特殊常景的特殊优化,比如:当集合中存的都是整数时,就会优化为 intset


zset

1.skiplist

skiplist:跳表

跳表也是链表,不同于普通的链表,每个节点上有多个指针域;
通过巧妙的搭配这些指针域的指向,就可以做到,从跳表上查询元素的时间复杂度是O(logN)
示例: 链表笔试题中的一个经典题目【138. 随机链表的复制】

2.ziplist

压缩链表
ziplist 是一种紧凑的、压缩的数据结构,它将多个元素按顺序存储在一起,节省内存空间



object encoding 命令查询内部编码

object encoding key:查看 key 对应的 value 的实际编码方式

示例代码:

127.0.0.1:6379> type key1
string
127.0.0.1:6379> OBJECT encoding key1
"int"
127.0.0.1:6379> type key2
list
127.0.0.1:6379> OBJECT encoding key2
"quicklist"
127.0.0.1:6379> type key3
set
127.0.0.1:6379> OBJECT encoding key3
"intset"
127.0.0.1:6379> type key4
hash
127.0.0.1:6379> OBJECT encoding key4
"ziplist"

redis 会自动根据当前的实际情况选择内部的编码方式,是自动适应的,我们在使用 redis 的时候一般感知不到文章来源地址https://www.toymoban.com/news/detail-857179.html

到了这里,关于Redis 的数据结构和内部编码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Redis】Hash 哈希内部编码方式

    哈希的内部编码有两种: ziplist(压缩列表):当哈希类型元素个数⼩于hash-max-ziplist-entries配置(默认512个)、同时所有值都⼩于hash-max-ziplist-value配置(默认64字节)时,Redis会使⽤ziplist作为哈希的内部实现,ziplist使⽤更加紧凑的结构实现多个元素的连续存储,所以在节省内

    2024年02月07日
    浏览(44)
  • Redis学习路线(2)—— Redis的数据结构

    一、Redis的数据结构 Redis是一个Key-Value的数据库,key一般是String类型,不过Value的类型却有很多: String: Hello World Hash: {name: \\\"jack\\\", age: 21} List: [A - B - C - C] Set: {A, B, C} SortedSet: {A: 1, B: 2, C: 3} GEO: {A: (120.3, 30.5)} BitMap: 0110110101110101011 HyperLog: 0110110101110101011 由于Redis对数据

    2024年02月15日
    浏览(43)
  • redis1之安装redis,启动,常用数据结构

      目录 redis安装与启动、常见数据结构 启动  Redis客户端 数据结构与常见的命令  redis的通用命令  String类型的用法 Hash命令的用法  List命令  Set命令  SortedSet类型用法 1,在linux上安装上gcc的依赖,我这里是centos7.6,gcc是4.5 我们在LInux上查看一下我们的系统信息  我这里安装

    2024年02月06日
    浏览(48)
  • Redis常见数据结构

    Redis是一个key-value的数据库,key一般是String类型,但是value的类型多种多样 在学习Redis不同数据类型时,我们可以在官网( Redis官网)查看不同的命令: 也可以使用使用help @xxx 命令的方式查看 通用命令是部分数据类型都可以使用的指令,常见的有: KEYS:查看符合模板的所有k

    2024年02月13日
    浏览(42)
  • Redis底层数据结构

    SDS全称是Simple Dynamic String,具有如下显著的特点: 常数复杂度获取字符串长度:C语言获取一个字符串的长度需要遍历整个字符串时间复杂度为O(N),而SDS在属性len中记录了字符串长度,获取字符串长度的时间复杂度为O(1)。 杜绝缓冲区溢出:C字符串在执行拼接字符串时,如果

    2024年02月13日
    浏览(46)
  • redis 数据结构(二)

    整数集合是  Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不时,就会使用整数集这个数据结构作为底层实现。 整数集合本质上是一块连续内存空间,它的结构定义如下: 可以看到,保存元素的容器是一个 contents 数组,虽然 contents 被声明为 i

    2024年02月09日
    浏览(38)
  • Redis数据结构简介

    对redis来说,所有的key(键)都是字符串。     1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value。   String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。   使用:get 、 set 、 del 、 incr、 decr 等

    2024年02月07日
    浏览(45)
  • Redis - 底层数据结构

    Redis 的底层数据结构主要以下几种: SDS(Simple Dynamic String, 简单动态字符串) ZipList(压缩列表) QuickList(快表) Dict(字典) IntSet(整数集合) ZSkipList(跳跃表) 在 Redis 中,并不会直接使用 C 语言自带的字符串结构作为实际的存储结构,而只是将字符串作为字面量使用,大多数情况使用自

    2023年04月12日
    浏览(44)
  • Redis 数据结构详解

    Redis 数据类型分为:字符串类型、散列类型、列表类型、集合类型、有序集合类型。 Redis 这么火,它运行有多块?一台普通的笔记本电脑,可以在1秒钟内完成十万次的读写操作。 原子操作:最小的操作单位,不能继续拆分。即最小的执行单位,不会被其他命令插入。高并发

    2024年02月05日
    浏览(43)
  • Redis的数据结构

    Redis是一款高性能的键值存储数据库,支持多种数据结构。在Redis中,数据结构是指在Redis中存储和操作数据的方式。Redis支持的数据结构包括字符串、哈希表、列表、集合和有序集合。 字符串是Redis中最基本的数据结构,可以存储任何类型的数据,包括数字、文本和二进制数

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包