Redis 数据结构

目录

一、String类型

二、Hash类型

三、链表(List)

四、Set 集合

五、zset有序集合

借鉴了优秀博主的文章:redis数据结构


Redis 为什么那么快?

除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。

注意:Redis 数据结构并不是指 String(字符串)对象、List(列表)对象、Hash(哈希)对象、Set(集合)对象和 Zset(有序集合)对象,因为这些是 Redis 键值对中值的数据类型,也就是数据的保存形式,这些对象的底层实现的方式就用到了数据结构

下图是 Redis 数据类型(也叫 Redis 对象)和底层数据结构的对应关图

可以看到,Redis 数据类型的底层数据结构随着版本的更新也有所不同,比如:

在 Redis 3.0 版本中 List 对象的底层数据结构由「双向链表」或「压缩表列表」实现,但是在 3.2 版本之后,List 数据类型底层数据结构是由 quicklist 实现的;
在最新的 Redis 代码(还未发布正式版本)中,压缩列表数据结构已经废弃了,交由 listpack 数据结构来实现了。
 

一、String类型

String数据类型是Redis中最基本的数据类型,是key-value的对应形式,redis中的string可以包含任何类型的数据,数字,字符串,图片等等

使用:get 、 set 、 del 、 incr、 decr 等

适用场景: 缓存:把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。


二、Hash类型

本身是一个HashMap,一种键值对的形式,field对应value

使用:所有hash的命令都是 h 开头的 hget 、hset 、 hdel 等

使用场景:做缓存: 能直观,相比string更节省空间的维护缓存信息,如用户信息,视频信息等。


三、链表(List)

Redis使用双端队列实现了链表,左右都可以插入删除

使用场景:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。


四、Set 集合

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中 :

1. 不允许有重复的元素

2.集合中的元素是无序的,不能通过索引下标获取元素

3.支持集合间的操作,可以取多个集合取交集、并集、差集。

使用场景:
1.给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
2.点赞,或点踩,收藏等,可以放到set中实现


五、zset有序集合

底层的实现是跳跃,跳跃表是有序单链表的一种改进,其查询、插入、删除也是O(logN)的时间复杂度。
有序集合和集合类似,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。

使用场景:排行榜,例如微博各种分类的排行榜,小说等按照不同类型(浏览量,收藏数量等)的排行榜.
 

借鉴了优秀博主的文章:redis数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Layneall

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

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

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

打赏作者

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

抵扣说明:

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

余额充值