Spring boot 网络编程

Redis学习-位图(bitmap)法统计活跃用户

2019-03-16  本文已影响113人  小胖学编程
  1. 一亿个用户,有的用户频繁登录,也有不经常登录的。
  2. 如何记录用户的登录信息?
  3. 如何查询活跃用户?[如一周内 登录三次的]

Redis中文教程
Redis语法大全

我们可以使用Redis的bitmap(位图)来存储数据。

1. 什么叫做Redis的bitmap

即:操作String数据结构的key所存储的字符串指定偏移量上的,返回原位置的值

1.1 优点:

节省空间:通过一个bit位来表示某个元素对应的值或者状态,其中key就是对应元素的值。实际上8个bit可以组成一个Byte,所以是及其节省空间的。
效率高:setbitgetbit的时间复杂度都是O(1),其他位运算效率也高。

1.2 缺点:

本质上只有01的区别,所以用做业务数据记录,就不需要在意value的值。

2. Redis的bitmap命令

2.1 setbit命令

设置或修改key上的偏移量(offset)的位(value)的值。

2.2 getbit命令

查询key所存储的字符串值,获取偏移量上的

bitmap的getbit指令

2.3 getcount命令

计算给定key的字符串值中,被设置为1的位bit的数量

注意:setbit是设置或者清除bit位置。这个是统计key出现1的次数。
(小胖友情提示:)需要注意的是:[start][end](单位)实际是byte,这是什么意思呢?进入redis实际上是乘以8。

bitcount指令的使用

2.4 bitop命令

对一个或多个保存二进制的字符串key进行元操作,并将结果保存到destkey上。

除了NOT之外,其他操作多可以接受一个或多个key作为输入。

(敲黑板,划重点)BITOP的时间复杂度是O(N),当处理大型矩阵或者大量数据统计时,最好将任务指派到附属节点(slave)进行,避免阻塞主节点。

3. Redis的bitmap应用场景

两个命令都是效率高并且省内存,因为直接操作的是Redis存储的数据。

3.1 可以作为简单的布隆过滤器来判断用户是否执行过某些操作。

基于Redis的分布式布隆过滤器

3.2 用户日活,月活,留存率的统计

实际是统计每天的用户数量。

按日期生成一个位图(bitmap)

3.3 实现用户上线次数的统计

实际上是以用户为主体

setbit xiaopang 1 0;记录小胖的上线天数,bitcount xiaopang统计小胖的上线天数。

3.3 用户在线状态和人数统计

也是使用一个bitmap,使用用户id来充当offset,上线标识是1,下线标识是0,也可轻松统计在线人数。

文章参考:
Redis:Bitmap的setbit,getbit,bitcount,bitop等使用与应用场景

上一篇 下一篇

猜你喜欢

热点阅读