一、聚合
1.0 模拟数据
添加sadd key1 1
sadd key1 2
sadd key1 3
sadd key2 1
sadd key2 "a"
sadd key2 3
列表sscan key1 0
1
2
3
sscan key2 0
1
a
3
1.1 并集-UNIONSTORE
所有给定集合的并集存储在新建key集合中。SUNIONSTORE key-union key1 key2
sscan key-union 0
1
a
3
2
1.2 差集-DIFFSTORE
返回给定所有集合的差集并存储在新建key集合中。SDIFFSTORE key-diff key1 key2
sscan key-diff 0
2
1.3 交集-INTERSTORE
返回给定所有集合的交集并存储在新建key集合中。SINTERSTORE key-inter key1 key2
sscan key-inter 0
1
3
二、排序
保序:List、SortedSet。scan data 0
a
b
c
d
e
2.1 List
根据插入顺序,建立消息顺序。
但是在涉及到分页时,增或删就会有特殊问题。LRANGE data 0 2
a
b
c
LRANGE data 3 5
d
e
f
新增一条Glpush data G
此时的分页就彻底乱掉了LRANGE data 0 2
G
a
b
LRANGE data 3 5
c
d
e
2.2 SortedSet
根据权重来建立消息顺序。zadd data 2 a 3 b 4 c 5 d 6 e 7 f
新增一条Gzadd data 1 G
此时使用ZRANGEBYSCORE
命令根据权重分值来查询ZRANGEBYSCORE data 2 4
a
b
c
ZRANGEBYSCORE data 5 7
d
e
f
此时我们只需要根据分值分页排序,就可以拿到在新增后依旧是原先列表的数据集合了。
三、二值状态
集合元素的取值就只有 0 和 1 两种。使用Bitmap为我们的数据结构。
Bitmap 本身是用 String 类型作为底层数据结构实现的一种统计二值状态的数据类型。
事例:
设置2022年5月1日已签到:setbit data:202205 0 1
getbit data:202205 0
统计2022年5月签到数:bitcount data:202205
另外,bitmap提供了丰富的二进制操作符操作。BITOP
命令配合AND
、OR
、NOT
、XOR
。BITOP 二进制操作 resbitmap bitmap1 bitmap2 ...
四、基数统计
基数统计就是指统计一个集合中不重复的元素个数。
一个用户一天内的多次访问只能算作一次,就是统计网页的 UV。网页 UV 的统计有个独特的地方,就是需要去重。set
和hash
默认支持去重。
但是两者在数据量达到千万以上后,非常消耗内存。
HyperLogLog
是一种用于统计基数的数据集合类型,它的最大优势就在于,当集合元素数量非常多时,它计算基数所需的空间总是固定的,而且还很小。
每个 HyperLogLog 只需要花费 12 KB 内存,就可以计算接近 2^64 个元素的基数。
|
然后来获取统计结果pfcount data
5
注意:HyperLogLog 的统计规则是基于概率完成的,所以它给出的统计结果是有一定误差的,标准误算率是 0.81%。