Redis7的数据结构

Redis以键-值对的形式存储数据

一、键
1、键的特点

键是一个字符串,这个字符串的内容可以是数字、字符序列,也可以是一个文件的字节序列,甚至空字符串也可以做为key。

在一个数据库中键必须是唯一的。

键最大可以达到512M,但太长的键会占用更多的空间,同时也会影响查询的效率。

2、键的格式

在redis中一个键可以是一个简单的值,如

//序列
sequence

也可以由多个部分组成,每个部分之间使用“:”分隔。如

//用户信息,格式为账号:姓名:角色
root:管理员:admin

    这种方式也是redis推荐的方式,过短的key不利于描述业务状态,而过长的key会占用更多内存,而且查询效率也会受到影响。

二、值
1、特点

值可以重复

2、值的类型

    其中值的数据类型有以下几种(数据的存储结构):string类型,list类型、hash类型、set类型、zset类型、stream类型

1)string类型

    值的类型为字节序列,包括文本、序列化对象和二进制数组,一个key对应一个值。默认情况下每个字符串的最大值为512 MB


    字符串其底层使用三种数据结构存储数据,分别为int、embstr和raw。

    int:当值为整数时,会以int型进行存储

    embstr:当字符串的字节数小于等于44个时,会以embstr类型存储

    raw:当字符串的字节数大于44个时,会以raw类型存储

2)list类型

一个键对应一组字符串,可以把值看成一个数组,其值是有序(即取出顺序与添加时的顺序相同)且可重复的


    list其底层使用quicklist存储数据

    quicklist:称为快速列表,是由listPack组成的双向链表,即quicklist的每一个节点都是一个listPack。当listPack的大小超过8k时,才会创建下一个节点。

    listPack是优化后的ziplist,listPack每个节点不再包含前一个节点的长度,这样就可以避免端情况下连锁更新带来的不小的性能消耗。

3)hash类型

    一个键对应另一组键值对,可以把值看成一个Map集合,它的键被称为字段,值被称为字段的值,字段无序且不重复,字段值无序且可重复。

    默认情况下hash使用listpack存储,当保存的字段-值的数量大于512个或者当个字段的值大于64个字节时,改为hashtable。


4)set类型

    与list一样是一个键对应一组值,但值不能重复且不按插入的顺序保存

    当第一次插入的数据是一个整数时,会使用intset存储数据 ,只有有任何一个值不是整数,则改为hashtable存储


5)zset类型

zset与set的区别是此值是有序的,可以通过下标指定值的位置

    zset默认使用listpack存储数据,当值的数量大于128或是某个值的长度大于64个字节,改为skiplist存储数据


6)stream类型

    Stream也是一种hash数据,可以简单的理解为hash的每一个值都为一个列表,而它的字段名是自动生成的

    它的底层结构就是stream


注:

要查看key的数据类型可以使用以下命令

type key

要查看key的底层存储结构可以使用以下命令

object encoding key

 文章来源于哔站《Redis7的数据结构

更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频

更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ ​ :开源吧

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱分享的代码君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值