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编码

相关推荐
gavin_gxh2 分钟前
ORACLE 删除archivelog日志
数据库·oracle
一叶飘零_sweeeet5 分钟前
MongoDB 基础与应用
数据库·mongodb
猿小喵21 分钟前
DBA之路,始于足下
数据库·dba
爬山算法24 分钟前
Maven(28)如何使用Maven进行依赖解析?
java·maven
tyler_download30 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
编程、小哥哥1 小时前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
2401_857439691 小时前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
李老头探索1 小时前
Java面试之Java中实现多线程有几种方法
java·开发语言·面试
weixin_449310841 小时前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql