一、Redis数据结构

       

目录

1.字符串

1.1 内部编码

1.2 应用场景

2.哈希

2.1 内部编码

3.列表

3.1 内部编码

3.2 应用场景

4.集合

4.1 内部编码

4.2 应用场景

5.有序集合

5.1 内部编码

 5.2 应用场景

6.总结


        Redis作为K/V数据库的一种,Key的数据结构只有字符串一种形式,而Value存在5种数据结构,分别是字符串、哈希、列表、集合和有序集合

1.字符串

        在redis中,字符串的大小限制为512MB,能用来表示简单或复杂的字符串(eg:XML、JSON)、数字(整数、浮点数,用于自增自减等等)、二进制串(eg:图片、音视频)。

1.1 内部编码

redis字符串的内部编码有3种。

  • int:8字节长整型
  • embstr:上限为39字节的字符串
  • raw:大于39个字节的字符串

1.2 应用场景

  • 缓存:作为缓存层,字符串存储单个数据
  • 计数:例如视频播放数,利用redis的自增命令
  • 共享session:集中管理所有用户的Session
  • 限速:例如获取验证码场景,利用计数和过期时间限制一段时间内的请求频率

2.哈希

redis为Value提供了哈希的数据结构,即 key :{[field1:value1]...}

2.1 内部编码

  • ziplist:实际上是一个存储在连续内存上的特殊双向链表,不像普通的链表使用前后指针关联在一起,它是存储在连续内存上的。默认当哈希元素个数小于512个,所有值小于64字节时,使用ziplist,优点在于节省内存,但每次修改需要复制到新的内存
  • hashtable:ziplist读写效率会随着元素个数的增加和元素大小的增大而降低,此时redis使用hashtable存储,其优点在于读写时间复杂度为O(1)

        zlbytes: 记录 ziplist 整个结构体的占用空间大小。

        zltail: 记录整个 ziplist 中最后一个 entry 的偏移量。

        zllen: 16 位无符号整型, 记录 entry 的数量

        entry为每个ziplist节点。

        zlend: 为 ziplist 的结束标识。

        prelen:记录前一个 entry 的长度。

        encoding 编码取决于具体值的内容,分为字符串、数字两种类型单独处理。

        enty-data:具体数据。

2.2 应用场景

        同字符串,但哈希类型能更直观的存储数据(eg:存储一个对象的多个属性)

3.列表

        可以存储多个有序的字符串,即一个双向链表,可以用作队列和栈,最多可以存储2^32-1个元素。可以通过索引查找列表中的某个元素,但是因为是链表所以时间复杂度为O(元素偏移量)。

3.1 内部编码

  • ziplist:同第2节中的ziplist
  • linkedlist:链表
  • quicklist:redis3.2版本提供,以ziplist的形式存储一片数据,即数据分成若干份,每一份都以连续内存存储,前后份之间以指针连接。即每个quicklistNode由多个ziplistNode组成。

 

3.2 应用场景

  • 消息队列
  • 文章列表:按顺序和索引获取元素。

4.集合

        列表允许有重复元素,集合不允许,并且集合中元素是无序的,不能通过索引下标获取。。redis除了支持集合内的增删改查,同时还支持多个集合取交集、并 集、差集。

4.1 内部编码

  • intset:整数集合,当元素都是整数并且个数小于512(默认)时使用
  • hashtable:表明集合不允许存在重复元素,但读取时间复杂度为O(1)

4.2 应用场景

  • 标签:用集合存储某个个体的兴趣等属性,可以通过交、差集合操作方便判断两人之间的异同。

5.有序集合

        有序集合也不允许存在重复元素,但是它会为每个元素设置一个分数作为排序的依据,其中分数可以重复。

5.1 内部编码

  • ziplist
  • skiplist:使用跳表来存储有序序列,提高查询效率,它的插入和查找效率都是O(logN)

 5.2 应用场景

  • 排行榜:例如视频播放量排行、用户点赞排行等等。

6.总结

数据结构是否允许重复是否有序有序实现方式内部编码应用场景
字符串\\\
  • int
  • embstr
  • raw
  • 缓存
  • 计数
  • 共享session
  • 限速
哈希\\
  • ziplist
  • hashtable
  • 模拟关系型数据库存储
列表索引
  • ziplist
  • linkedlist
  • 消息队列
  • 文章列表
集合\
  • intset
  • hashtable
  • 标签
有序集合分数
  • ziplist
  • skiplist
  • 排行榜

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值