redis数据操作(Bitmaps、HyperLogLog)

Bitmaps

uid=0,5,11,15,19
使用Bitmap来保存用户是否访问过网站

hadoop:6379> setbit unique:users:2020-10-24 0 1
(integer) 0
hadoop:6379> setbit unique:users:2020-10-24 5 1
(integer) 0
hadoop:6379> setbit unique:users:2020-10-24 11 1
(integer) 0
hadoop:6379> setbit unique:users:2020-10-24 15 1
(integer) 0
hadoop:6379> setbit unique:users:2020-10-24 19 1
(integer) 0

获取指定用户是否访问过网站

hadoop:6379> getBit unique:users:2020-10-24 0
(integer) 1

统计2020-10-24这一天一共有多少用户访问了网站

hadoop:6379> bitcount unique:users:2020-10-24 0 -1
(integer) 5

计算2020-10-24与2020-10-25的所有访问网站的用户

hadoop:6379> setbit unique:users:2020-10-25 0 1
(integer) 0
hadoop:6379> setbit unique:users:2020-10-25 6 1
(integer) 0
hadoop:6379> setbit unique:users:2020-10-25 12 1
(integer) 0

取or操作

hadoop:6379> bitop or unique:users:or:2020-10-24_25 unique:users:2020-10-24 unique:users:2020-10-25
(integer) 3

取数量

hadoop:6379> bitcount unique:users:or:2020-10-24_25 0 -1
(integer) 7

小结:

  • Bitmap存储的值是0或者1
  • 理解Bitmaps:就是一个存储0、1的一维数组
  • 操作Bitmaps的时候,必须要带上一个offset(偏移量)

HyperLogLog

求某个网站的uv值

hadoop:6379> pfadd taobao:uv:2020-10-24 1
(integer) 1
hadoop:6379> pfadd taobao:uv:2020-10-24 2
(integer) 1
hadoop:6379> pfadd taobao:uv:2020-10-24 1
(integer) 0

获取uv的值

hadoop:6379> pfcount taobao:uv:2020-10-24
(integer) 2

小结:

  • 只用来做一些去重的、大数据量的统计(uv)
  • 限制:HyperLogLog结构存在一定的误差,误差很小,0.81%。所以它不适合对精确度要求特别高的统计。这种操作,对精确度要求没那么高,可以使用该结构
  • HyperLogLog结构不会存储数据的明细,针对uv场景,它为了节省空间资源,只会存储数据经过算法计算后的基数值,基于基数值来进行统计的。
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页