小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
Hyperloglog
A(1,3,5,7,8,7)
b(1,3,5,7,8)
基础(不重复的元素)=5 可以接受误差
redis 2.8.9版本就更新了Hyperloglog数据结构
Redis Hyperloglog基数统计算法!
网页的UV(一个人访问一个网站多次,但是还是算一个人)
传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为判断
这个方式如果保存大量用户id,就会比较麻烦,我们的目的是为了技术而不是保存用户id
优点:占用的内存是固定,2^64不同元素的技术,只需要12kB的内存如果要从内存角度来比较的话
有百分之0.81的错误率,统计UV任务,可以忽略不计
pfadd #添加
pfcount #统计基数数量
pfmerge mykey3 mykey myke2 #合并
如果允许容错的话,可以使用Hyperloglog,如果不允许容错用set或者其他数据结构
例子
127.0.0.1:6379> pfadd key1 a b c d e
(integer) 1
127.0.0.1:6379> pfadd key2 b c d g h
(integer) 1
127.0.0.1:6379> pfmerge key3 ke1 key2
OK
127.0.0.1:6379> pfcount key3
(integer) 5
Bitmaps
位存储
统计用户信息,活跃,不活跃,登录,未登录,打卡,两个状态都可以使用bitmaps
使用bitmap 来记录周一到周日的打卡
setbit sign 0 1
查看某一天是否打卡
getbit sign 3
统计操作,统计打卡天数
bitcount sign #统计打卡记录
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 1
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(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> setbit sign 6 1
(integer) 0
127.0.0.1:6379> setbit sign 7 1
(integer) 0
127.0.0.1:6379> getbit sign 2
(integer) 1
127.0.0.1:6379> bitcount sign 1 5
(integer) 0
127.0.0.1:6379> bitcount sign
(integer) 6