Redis有哪些数据结构,他们底层分别是如何实现的。适合哪些场景?
Redis有哪些数据结构,他们底层分别是如何实现的。适合哪些场景?
提示
题眼: 5+4
Redis有以下几种常用的数据结构:
- 字符串(String):Redis的最基本数据结构,底层实现是简单的动态字符串,适合存储简单的键值对数据。
- 列表(List):底层实现是双向链表和压缩链表,可以进行快速的插入和删除操作,适合用于实现消息队列、最新消息排行等场景。
- 集合(Set):底层实现是哈希表和数组,可以实现高效的插入、删除和查找操作,并且支持对多个集合进行交集、并集和差集等操作,适合用于去重、共同好友查找等场景。
- 哈希(Hash):底层实现是哈希表和压缩链表, 可以存储多个键值对,适合用于存储对象或者记录的多个字段。
- 有序集合(Z Set):底层实现是跳跃表和压缩链表的结合,可以对每个元素关联一个分数,并按照分数进行排序,适合用于排行榜、按权重获取数据等场景。
这些数据结构的底层实现都是通过C语言来实现的,使用了高效的数据结构和算法。Redis通过将数据存储在内存中,并且使用单线程的方式处理请求,以提高读写性能。
根据以上数据结构的特点,Redis适合用于需要高性能、低延迟的场景,例如缓存、计数器、消息队列、实时排行榜等。
重要
参考答案:
Redis自带的有五种数据结构,string、list、hash、set和zset。除了这五种,还有几个扩展类型,分别是bitmap位图,GEO、Stream和HyperLogLog类型。位图的话,是基于Stream实现的01数组,它主要用来存一些只有两种状态的数据。GEO的话是地理空间索引,主要是便于存储地理位置信息。然后Stream的话,主要存放消息流,HyperLogLog主要是做基数估算。这些平常很少用到,所以只是了解过。然后的话,redis常用的数据除了String用的是动态字符串,其他结构它一般都是由两种数据结构来提供,比如set用的就是哈希和 压缩链表,Zset用的是跳表和压缩链表,当数据量比较少的时候用压缩链表,数据比较多的时候会切成跳表。
相关信息
引申:什么是动态字符串?
