Redis

Redis 笔记(十)-三种特殊类型 Hyperloglog(基

2021-08-10  本文已影响0人  yjtuuige

一、Hyperloglog(基数统计)

传统实现方法:存储用户的 id,然后每次进行比较。当用户变多之后这种方式及其浪费空间,而我们的目的只是 计数Hyperloglog 就能帮助我们利用最小的空间完成。

命令 描述
pfadd key member [member ….] 添加指定元素到 HyperLogLog 中
pfcount key [key…] 获得 Hyperloglog 中的成员数量,重复的成员不会统计
pfmerge key destkey sourcekey [sourcekey…] 将多个集合,合并成一个新的集合
127.0.0.1:6379> pfadd mykey a b c d e f g h i j        # 添加元素
(integer) 1
127.0.0.1:6379> pfadd mykey2 z m k l b j a i c
(integer) 1
127.0.0.1:6379> type mykey        # hyperloglog 底层使用 String
string
127.0.0.1:6379> pfcount mykey         # 估算 mykey 的基数
(integer) 10
127.0.0.1:6379> pfcount mykey2
(integer) 9
127.0.0.1:6379> pfmerge mykey3 mykey mykey2        # 合并 mykey 和 mykey2 成为 mykey3(并集)
OK
127.0.0.1:6379> pfcount mykey3        估算 mykey3 的基数
(integer) 14

二、Bitmap(位图)

命令 描述
setbit key offset value 设置,value 只能存储 0 或者 1 两种状态
getbit key offset 获取,通过 key-value 取出对应的状态信息
bitcount key 统计,通过 key 来统计非 0 的数量
127.0.0.1:6379> setbit sign 0 1      # 设置 sign 的第 0 位为 1
(integer) 0
127.0.0.1:6379> setbit sign 2 1        # 设置 sign 的第 2 位为 1,不设置,默认为 0
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> getbit sign 0        # 获取第 0 位的数值
(integer) 1
127.0.0.1:6379> getbit sign 3        # 未设置默认是 0
(integer) 0
127.0.0.1:6379> bitcount sign        # 统计 sign 中为 1 的个数
(integer) 4
上一篇 下一篇

猜你喜欢

热点阅读