Redis—常用数据结构
- 🔎数据结构与内部编码
Redis 中常用的数据结构包括
- Strings—字符串
- Hashes—哈希表
- Lists—列表
- Sets—集合
- Sorted sets—有序集合
Redis 底层在实现上述数据结构时, 会在源码层面针对上述实现进行特定优化, 以达到节省时间 / 节省空间的效果
翻译一下就是
假设当前用的数据结构是哈希表, 但是这个背后的实现不一定是一个标准的哈希表, 有可能在特定场景下, 使用其他数据结构来实现, 但仍然满足使用哈希表时候的查询操作 O(1) 时间复杂度等其他方面特征
举个栗子🌰
你去鸭脖店买鸭脖, 但背后的数据结构不一定是鸭脖, 有可能在特定场景下优化为老鼠
但仍然满足味道, 口感和鸭脖一样
🔎数据结构与内部编码
Redis 中的数据结构会根据场景的不同自适应不同的内部编码
- string
- raw, 最基本的字符串
- int, Redis 也会用于实现计数功能, 此时 value 作为一个整数可能会使用 int 编码
- embstr, 针对短字符串进行的优化
- hash
- hashtable, 最基本的哈希表
- ziplist, 当哈希表中元素较少时会优化成 ziplist(压缩列表), 节省空间
- list
- linkedlist, 链表
- ziplist, 压缩列表
- Redis 3.2 开始, 引入新的实现方式—quicklist, quicklist 就是一个链表, 其中的每个元素又是一个 ziplist, 兼顾空间和效率
- set
- hashtable, 最基本的哈希表
- intset, 当集合中存储的都是整数时优化为 intset
- zset
- skiplist, 跳表—查询时间可以达到 O(logN)
- ziplist, 压缩列表
通过 type key 查询对应 value 的数据类型
通过 object encoding key 查询对应 value 的内部编码
🌸🌸🌸完结撒花🌸🌸🌸