redis的五种数据类型底层
原创
Redis的五种数据类型底层实现
Redis是一个开源的高性能的键值数据库。它提供了五种数据类型来满足不同的场景需求。下面将详细介绍这五种数据类型的底层实现。
1. 字符串(String)
字符串是Redis中最基本的数据类型,它可以是单纯的字符串,也可以是繁复的JSON序列化对象。字符串类型的底层实现首要有两种:
- 整数:当字符串内容是整数值时,Redis会使用整数类型存储,节省内存空间。
- embstr编码的单纯动态字符串(SDS):当字符串内容不是整数值时,Redis会使用SDS存储。embstr编码的SDS是只读的,当需要进行修改时,会转换成raw编码的SDS。
2. 列表(List)
列表是一种按照插入顺序排序的字符串元素集合。列表的底层实现首要有以下两种:
- 压缩列表(ziplist):当列表中的元素数量较少且元素大小较小(小于64字节)时,Redis会使用压缩列表存储。压缩列表可以节省内存空间,但读取性能较低。
- 双向链表(linkedlist):当列表中的元素数量较多或元素大小较大时,Redis会使用双向链表存储。双向链表的读取性能较高,但会占用更多的内存空间。
3. 集合(Set)
集合是无序的、不重复的字符串元素集合。集合的底层实现首要有以下两种:
- 整数集合(intset):当集合中的元素都是整数且元素数量较少时,Redis会使用整数集合存储。整数集合可以节省内存空间,减成本时间读取性能。
- 哈希表(hashtable):当集合中的元素不是整数或元素数量较多时,Redis会使用哈希表存储。哈希表的读取性能较高,但会占用更多的内存空间。
4. 哈希(Hash)
哈希是一种键值对集合,它存储了字段和字段值的映射关系。哈希的底层实现首要有以下两种:
- 压缩列表(ziplist):当哈希中的字段数量较少且字段名和字段值的大小较小(小于64字节)时,Redis会使用压缩列表存储。
- 哈希表(hashtable):当哈希中的字段数量较多或字段名和字段值的大小较大时,Redis会使用哈希表存储。
5. 有序集合(ZSet)
有序集合是有序的、不重复的字符串元素集合,每个元素都会相关性一个分数。有序集合的底层实现首要有以下两种:
- 压缩列表(ziplist):当有序集合中的元素数量较少且元素大小较小(小于64字节)时,Redis会使用压缩列表存储。
- 跳表(skiplist)+ 哈希表:当有序集合中的元素数量较多或元素大小较大时,Redis会使用跳表+哈希表的组合存储。跳表可以实现敏捷的范围查询和有序性保障,而哈希表可以提供敏捷的元素查找。
文章标签:
Redis
上一篇:redis五种数据类型底层结构 下一篇:redis数据类型及底层数据结构