Bitmap(位图)

Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身 。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。

你可以将 Bitmap 看作是一个存储二进制数字(0 和 1)的数组,数组中每个元素的下标叫做 offset(偏移量)。

https://oss.javaguide.cn/github/javaguide/database/redis/image-20220720194154133.png

常用命令

命令 介绍
SETBIT key offset value 设置指定 offset 位置的值
GETBIT key offset 获取指定 offset 位置的值
BITCOUNT key start end 获取 start 和 end 之前值为 1 的元素个数
BITOP operation destkey key1 key2 ... 对一个或多个 Bitmap 进行运算,可用运算符有 AND, OR, XOR 以及 NOT

应用场景

HyperLogLog(基数统计)

Redis 提供的 HyperLogLog 占用空间非常非常小,只需要 12k 的空间就能存储接近 2^64 个不同元素。这并且,Redis 对 HyperLogLog 的存储结构做了优化,采用两种方式计数:

基数计数概率算法为了节省内存并不会直接存储元数据,而是通过一定的概率统计方法预估基数值(集合中包含元素的个数)。因此, HyperLogLog 的计数结果并不是一个精确值,存在一定的误差(标准误差为 0.81% )。

常用命令

HyperLogLog 相关的命令非常少,最常用的也就 3 个。

命令 介绍
PFADD key element1 element2 ... 添加一个或多个元素到 HyperLogLog 中
PFCOUNT key1 key2 获取一个或者多个 HyperLogLog 的唯一计数。
PFMERGE destkey sourcekey1 sourcekey2 ... 将多个 HyperLogLog 合并到 destkey 中,destkey 会结合多个源,算出对应的唯一计数。

应用场景

Geospatial (地理位置)

Geospatial index(地理空间索引,简称 GEO) 主要用于存储地理位置信息,基于 Sorted Set 实现。