写点什么

Redis 入门二:数据类型

用户头像
打工人!
关注
发布于: 8 小时前
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 位坐标,包括经度和维度信息,当我们想要知道北京到上海的距离时,有了两地的地理信息,就可以直接计算出来。

发布于: 8 小时前阅读数: 6
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
Redis入门二:数据类型