当前位置: 首页 > news >正文

Redis五大基础类型解析

1.String类型

特征:即存储字符串的类型,单个字符串存储量最大不超过512MB

常用业务场景:⽤来存储JSON序列化之后对象

底层编码:

int编码

数据结构特点:ptr指针直接指向字符串常量池中对应字符串地址,而且数组中元素只能为数字

使⽤要求:每⼀个字符必须是数字

EmbStr编码

数据结构特点:采⽤简单动态字符串结构,这种结构的特征就在于是⼀个可扩容的字符数组,由当前已使⽤⻓度字段,当前未使⽤⻓度字段以及⼀个字符数组组成。

扩容规则:当字符数组大小小于1MB时,将总长度进行翻倍,如果字符数组大小大于1MB,那么每次增加1MB的长度

使用要求:当字符串大小小于32MB时候,采用的编码

数据结构内存地址所在:为RedisObject对象后的连续内存

Raw编码

数据结构特点:同样采用简单动态字符串作为数据结构

使用要求为当字符串大小超过32MB的时候,自动转为RAW编码

数据结构内存地址所在:不和RedisObject对象在⼀起,而是在内存中其他随机地方

重点:由于EmbStr和Raw编码中简单动态字符串结构(SDS)内存地址不同,所以最开始⽣成String对象的时候,分配内存的次数也不同,由于EmbStr的RedisObject对象和SDS对象是连续的,所以⼀起分配内存就行,但是raw需要两次内存分配

2.List类型

特征:有序,可重复列表。每个List类型可以插入(2的32次方)-1个元素

常⽤业务场景

最新与最老数据的TOP显示:由于底层采用双向链表/压缩列表的方式进行存储,均能获取头节点和尾节点指针,每个节点均有前后指针的关系,非常适合进行操作头部与尾部节点

消息队列:即⽣产者可以使⽤push方法往List类型的头部插入信息,然后消费者通过pop对List类型的尾部进行消费

底层编码:

ZipList编码

数据结构特点:即⼀段连续的内存数组,但是和普通的数组不同,他的每⼀个元素空间都是根据其中存储的元素大小来规定的,并不是死板的固定大小,并有记录当前最后⼀个元素位置的指针。

数据结构特点:即⼀段连续的内存数组,但是和普通的数组不同,他的每⼀个元素空间都是根据其中存储的元素大小来规定的,并不是死板的固定大小,使⽤要求:即当每⼀个元素大小不超过64个字节,总元素个数不超过512个并有记录当前最后⼀个元素位置的指针。

数据结构内存地址所在:作为RedisObject对象后的连续内存,所以⽣成List对象时,此编码只⽤分配⼀次内存

LinkedList编码

数据结构特点:就是双向链表

使⽤要求:当不满⾜zipList编码要求的时候,就会变成LinkedList编码

数据结构内存地址所在:不和RedisObject在⼀起,⽽是在内存中的任意位置

3.Hash类型

特征:每个Hash类型可以存放(2的32次⽅)-1个键值对

常⽤业务场景:购物车的管理,即使⽤⽤户id作为key值,⽤商品id作为field字段,⽤商品数量作为value,那么我们可以使⽤hgetAll指令完成购物⻋全选,hdel删除指定商品等等操作

底层编码:

ZipList编码

数据结构特点:和List类型采⽤此编码时运⽤不太⼀样,Hash类型会把field-value键值对连续的插⼊到压缩列表中,从⽽完成不同键值对的存储

使⽤要求:即当每⼀个元素⼤⼩不超过64个字节,总元素个数不超过512个

数据结构内存地址所在:作为RedisObject对象后的连续内存,所以⽣成List对象时,此编码只⽤分配⼀次内存

Hashtable编码

数据结构特点:底层为哈希表数据结构,⽤以存储field-value键值对

使⽤要求:当不满⾜zipList编码要求的时候,就会变成LinkedList编码

4.Set类型

特征:为⽆序,⽽不可重复集合,可以存放(2的32次⽅)-1个元素

常使⽤业务场景:

元素去重:即⼤量元素去重操作会占⽤⼤量CPU资源,那么把这些数据存储到Set类型中,即可完成去重操作

共同好友等:把⼀个⽤户的好友和另⼀个⽤户的好友进⾏交集处理,得到他们的公同好友,然后进⾏推荐

底层编码:

Inset编码

数据结构特点:即由整型数组组成的连续内存(此数组按元素⼤⼩进⾏排序),但是除了整形数组外,还有有当前数组包含的元素数量以及采⽤整形的编码,可分为int16,int32,int64.分别是整形数组中运⾏存放数值的⼤⼩

使⽤要求:元素个数⼩于512个,⽽且集合内元素全为数字

数据结构内存地址所在:和RedisObject相连的连续内存

HT编码

数据结构特点:由Value值为空的Hashtable结构组成,被称为字典。

使⽤要求:当不满⾜inset编码要求的时候,就会变成HT编码

5.ZSet类型

特征:为有序,⽽不可重复集合,可以存放(2的32次⽅)-1个元素

常使⽤业务场景:热⻔数据TOP排⾏榜,即利⽤Zset类型,有序不重复特点,把重复的数据进⾏去重并且使⽤score字段排序后,从⼩到⼤排序,反序即可得到热⻔数据TOP排⾏榜

底层编码:

ZipList编码

数据结构特点:压缩列表的另⼀种使⽤,即使⽤⼀个新增的score字段来决定元素在压缩列表中的位置,默认从⼩到⼤

使⽤要求:元素单个⼤⼩不能超过64字节,压缩数组⻓度不能超过128个元素

数据结构内存地址所在:和RedisObject相连的连续内存

skipList编码

数据结构特点:通过跳表与Hashtable的集合编码,利⽤跳表存储hash表中的节点来完成有序,操作主要还是在hash表中,跳表中的⼤⼩由Score字段来决定

使⽤要求:当不满⾜zipList编码要求的时候,就会变成skipList编码

http://www.lryc.cn/news/101811.html

相关文章:

  • 在CSDN学Golang云原生(服务网格istio)
  • Golang 获取本地 IP 地址方法
  • 抖音seo短视频账号矩阵系统技术开发简述
  • 运维高级--shell脚本完成分库分表
  • Mysql 忘记密码怎么重置密码(详细步骤)
  • 机器学习深度学习——图像分类数据集
  • 【PWN · 栈迁移】[BUUCTF]ciscn_2019_es_2
  • 网络编程(13): 网络通信常用命令(后续待补充)
  • flask创建数据库连接池
  • C语言手撕顺序表
  • 常见的排序算法
  • C#如何使用SQLite数据库?
  • 如何将表格中的状态数据转换为Tag标签显示
  • centos中修改防火墙端口开放配置
  • 程序设计 算法基础
  • 【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)
  • ubuntu开机自启动
  • Git将其他分支合并至主分支
  • Python+request+pytest 接口自动化测试框架入门(与unittest的比较)
  • 数据结构——复杂度
  • 使用goldengate 迁移Oracle到postgresql
  • ESP-C3入门20. CentOS开发环境及Jenkins流水线
  • 服务器被爬虫恶意攻击怎么办?
  • JavaScript正则表达式之座机号/手机号验证校验规则
  • 黑客学习手册(自学网络安全)
  • 获取非叶子节点的grad(retain_grad()、hook)【为了解决grad值是None的问题】
  • JMeter(八):响应断言详解
  • 【网络编程】IO复用的应用一:非阻塞connect
  • Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入
  • C#设计模式之---原型模式