Redis数据结构
关于Redis数据结构这块,还是推荐学习: RedisBook
Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手。
Redis主要支持以下数据结构:
- String(字符串)
- List(双端链表)
- Hash(Hash字典)
- Set(无序集合)
- Sorted Set(有序集合)
数据结构 | 描述 | 实现 |
---|---|---|
String | 可以存储字符串,整型和浮点型等类型的数据。适合于简单的K-V数据场景。 | Redis并没有使用字符数组来实现这一数据类型,而是自己定义了简单动态字符串(SDS: Simple Dynamic String)类型来实现这一数据结构。 |
List | 既可以存储操作有序的数据,还可以当做栈来使用,它适合存储列表性质的数据。 | List在Redis中使用的是双端链表和压缩列表实现的,这就解释了它为什么能在头尾操作元素。 C语言并没有双端链表的实现,所以Redis自定义了这一数据结构。 |
Hash | Hash字典,也是关联数组,数组的每个元素都是key到value的映射,它适合存储对象这样的结构化数据。 | Hash在Redis中是使用Hash字典和压缩列表实现的。 |
Set | Set无序集合,它适合存储需要去重的元素,且有并集,交集,差集等功能在多个Set之间进行比较计算。 | 整数集合是Set的底层实现之一,当集合只有整型元素且元素数量不多的时候,Redis就会使用整数集合来实现Set。当新添加元素的时候,整数集合会根据新元素的类型自动扩容,并将所有元素的类型都转为与新元素一样的类型,在这个过程中,还需要保持原来的顺序不变,最后才添加新元素。 |
Sorted Set | Sorted Set有序集合,可以看做加强版的Set。Sorted Set 与 Set不同的是,Sorted Set可以根据元素的score分数进行排序。它适合存储需要排序的不重复的元素。 | Sorted Set在Redis中使用的是跳表实现的,跳表是一种有序且查询速度很快的数据结构。跳表每个节点都维持指向其他节点的指针,从而达到快速访问的目的。 |