Dawn's Blogs

分享技术 记录成长

0%

Redis学习 (11) 新数据类型

本节介绍一些在 Redis 中除了五大基本数据类型之外的数据类型,包括用法和使用场景。

BitMap

BitMap 位图,用于存储一串连续的二进制数组,可以通过 offset 定位元素,特别适合一些数据量大且使用二值统计的场景。

位图之间可以做逻辑运算,如与、或、非、异或。

内部实现

BitMap 底层使用 string 类型作为实现,Redis 的字符串类型是二进制安全的,所以可以作为位图的底层数据结构。

HyperLogLog

Redis HyperLogLog 是 Redis 2.8.9 版本新增的数据类型,用于统计一个集合中不重复的元素个数(不精确的去重计数)。但要注意,HyperLogLog 是统计规则是基于概率完成的,不是非常准确,**标准误算率是 0.81%**。

HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的内存空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数,和元素越多就越耗费内存的 Set 和 Hash 类型相比,HyperLogLog 就非常节省空间。

GEO

Redis GEO 是 Redis 3.2 版本新增的数据类型,主要用于存储地理位置信息,并对存储的信息进行操作。

内部实现

GEO 本身并没有设计新的底层数据结构,而是直接使用了 Sorted Set 集合类型

GEO 类型使用 GeoHash 编码方法实现了经纬度到 Sorted Set 中元素权重分数的转换。这样一来,就可以把经纬度保存到 Sorted Set 中,利用 Sorted Set 提供的按权重进行有序范围查找的特性,实现 LBS 服务中频繁使用的搜索附近的需求。

Stream

Redis Stream 是 Redis 5.0 版本新增加的数据类型,Redis 专门为消息队列设计的数据类型。有以下两个特性:

  • 自动生成全局唯一消息 ID
  • 支持以消费组形式消费数据。