Redis 入门二:数据类型
主要内容:
本篇内容主要讲解 Redis 的数据类型。
String 类型:
String 是 Redis 最基本的类型,Redis 中存储数据是以 key-value 键值对的形式。String 类型是二进制安全的,意味着 Redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。一个 Redis 中字符串 value 最多可以是 512M。
现在来说一说 String 的底层实现:
String 的底层实现为动态字符串,是可以修改的,采用预分配冗余空间的方式来减少内存的频繁分配。
如图中所示,实际分配的空间 capacity 一般要高于实际字符串长度 len。当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。
List 列表:
List 列表实际上是一个字符串列表,里面存储的都是字符串。它是按照插入顺序进行排序,头部和尾部都可以插入数据。
底层实现是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
为了提高性能,把链表和压缩列表(ziplist)结合起来,形成最终的数据结构快速链表 quicklist。
列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即是压缩列表。
set 集合:
set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择。
Redis 的 Set 是 string 类型的无序集合。它底层其实是一个 value 为 null 的 hash 表,所以添加,删除,查找的复杂度都是 O(1)。
哈希 Hash:
Redis hash 是一个键值对集合,value 又是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
zset 有序集合:
Redis 有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的 。
底层是 hash 和跳跃表。
Bitmaps:
Bitmaps 本身不是一种数据类型, 实际上它就是字符串(key-value ), 但是它可以对字符串的位进行操作。
HyperLogLog:
在业务中通常会用到求搜索记录数,访问用户等信息,比如 3 分钟用户 A 对某个网站访问了 10 次,那么在搜集用户访问量的时候,他只能算是同一个用户,也就是说求 3 分钟内所有记录的基数。HyperLogLog 就是一个用来做基数统计的算法。
Gepspatial 地理信息:
这个数据就是 2 位坐标,包括经度和维度信息,当我们想要知道北京到上海的距离时,有了两地的地理信息,就可以直接计算出来。
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/0e7980224c777e86112cc8190】。文章转载请联系作者。
评论