redis基本数据结构
Redis最为常用的数据类型:
- String – 字符串
- Hash – 哈希
- List – 列表
- Set – 集合
- Sorted set – 有序集合
1. String
- 用途比较广泛,主要是缓存,计数器等;
- 底层编码
- int:8个字节的长整型。
- embstr:小于等于39个字节的字符串。
- raw:大于39个字节的字符串。
- 主要实现方式是简单动态字符串(SDS),不过这要看存储的字符串长度,因为redis会根据实际的存储数据进行相应的优化,比如如果是整形值,就会用长整型
2. hash
- 主要用于
- 哈希类型的内部编码有两种:
- ziplist(压缩列表):
1)当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)
2)所有值都小于hash-max-ziplist-value配置(默认64字节) - hashtable(哈希表):当哈希类型无法满足ziplist的条件时使用hashtable
Redis使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。
使用hashtable作为哈希的内部实现,ziplist的读写效率会下降,而hashtable的读写时间复杂度为O(1)。
3. List
- 用于实现消息队列
- 列表类型的内部编码有两种。
- ziplist(压缩列表):
1)当列表的元素个数小于list-max-ziplist-entries配置(默认512个)
2)列表中每个元素的值都小于list-max-ziplist-value配置时(默认64字节) - Linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用linkedlist作为列表的内部实现。
4. Set
- 存储不重复数据,如标签等
- 列表类型的内部编码有两种。
- intset(整数集合):当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时,Redis会选用intset来作为集合的内部实现,从而减少内存的使用。
- hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现。
5. Sorted Set
- 应用场景较多,可以用来实现排行榜
- 有序集合类型的内部编码有两种:
- ziplist(压缩列表):当有序集合的元素个数小于zset-max-ziplist-entries配置(默认128个),同时每个元素的值都小于zset-max-ziplist-value配置(默认64字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存的使用。
- skiplist(跳跃表):当ziplist条件不满足时,有序集合会使用skiplist作为内部实现,因为此时ziplist的读写效率会下降。
http://liuxingsata.github.io/2021/09/30/redis%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 流星飒沓!
评论