52 | 算法实战(一):剖析Redis常用数据类型对应的数据结构
1. Redis 是一种键值(Key-Value)数据库。相对于关系型数据库(比如 MySQL),Redis 也被叫作非关系型数据库。
2. Redis 中,键的数据类型是字符串,值的类型有 字符串、列表、字典、集合、有序集合。
2.1 列表
对应两种实现方法:一种是压缩列表(ziplist),另一种是双向循环链表。
(1) 压缩列表是 Redis 自己设计的一种数据存储结构。类似数组,通过一片连续的内存空间来存储数据。
但它的结构是 数量+数据1长度+数据1内容+数据2长度+数据2内容的方式存储。
节省空间,允许存储不同的数据结构,但数据量比较大时,就不适用了。(数据个数少于 512,单数据小于64字节)
(2) 双向循环链表是一个list结构,包含首尾指针,以及数据长度信息。
2.2 字典 用来存储一组数据对
对应两种实现方法:一种是压缩列表,另一种是散列表。
存储的数据量比较小的情况下使用压缩列表,否则使用散列表。
2.3 集合(set) 用来存储一组不重复的数据
对应两种实现方法:一种是有序数组,另一种是散列表。
(1) 当 存储的数据都是整数 且 存储的数据元素个数不超过 512个,就采用有序数组。
(2) 否则使用散列表。
2.4 有序集合(sortedset) 用来存储一组数据,并且每个数据会附带一个得分
对应两种实现方法:一种是压缩列表,另一种是跳表。
3. 数据结构持久化 即把数据存储到硬盘,有两个方式:
(1) 清除原有的存储结构,只将数据存储到磁盘中。
节省空间,但耗费时间大。
(2) 保留原来的存储格式,将数据按照原有的格式存储在磁盘中。
节省时间,但耗费空间大。