`

【赵强老师】Redis案例分析:用setbit统计活跃用户

阅读更多

一、需求背景

首先,我们来看一下需求:网站统计用户登录的次数,具体如下:

  • 网站有1亿个用户,有经常登录的,也有不经常登录的
  • 如何来记录用户的登录信息
  • 如何查询活跃用户:比如:一周内,登录3次的

二、使用传统的关系型数据库

我们使用传统的关系型数据库(比如:Oracle)来存储这样的数据,如下图所示。

 每周产生7亿条数据,对于任何一个关系型数据库来说,都是非常不好维护的,对性能也会有很大的影响。

三、使用Redis的setbit操作

Redis支持对String类型的value进行基于二进制位的置位操作。通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value记录所有活跃用户的信息。如下图所未,下图中的bitmap有9个位被置为1,表示这9个位上对应的用户是今天的活跃用户。其中第15位表示uid为15的用户,第一位表示uid为0的用户。(如果你的uid不是从1开始的,比如从100000开始,实际上你也可以相应的用uid减去初始值来表示其位数,比如1000000用户对应到bitmap的第一位)

具体的代码类似下面这样:
redis.setbit(key, user_id, 1)
这样一次记录的复杂度是O(1),在Redis中速度非常快。
下面代码是在Redis CLI中执行的Demo演示,比如:用户ID为100的用户在星期一登录了网站,我们就通过setbit操作,把星期一对应的100位的值置为1,
127.0.0.1:6379> setbit monday 100 1
(integer) 0
而我们通过每天换用一个不同的key来将每天的活跃用户状态记录分开存。并且可以通过一些与或运算计算出N天活跃用户,和连接N天活跃用户这样的统计数据。

如下图,第一行表示星期一的活跃用户情况,第二行表示周二的,以此类推。为样我们通过对N天的活跃用户记录取并集操作,就能得出在N天内活跃过的用户列表。

 

分享到:
评论

相关推荐

    传智播客 赵强 Oracle课件

    赵强老师在传智播客的Oracle课程是专为IT专业人士和对数据库技术感兴趣的学员设计的一系列教学资料,旨在深入浅出地讲解Oracle的核心概念、功能以及实际操作技巧。 在赵强老师的课程中,你可以学到以下几个重要的...

    赵强老师的Oracle课件

    想要好好地学习Oracle数据库的朋友呀,你错过了她就太不值得了。里面有好多的Oracle操作命令可能你都没接触过吧。好了,话不多多说。坚信资料不错!你,值得拥有!OK.还有,之所有要你2分打赏,是我给了你这么好的...

    精通JSP编程 作者赵强 编

    精通JSP编程 作者赵强 编 12-18节

    精通JSP编程 作者赵强

    《精通JSP编程》是赵强先生的一部深入解析JSP技术的专业著作,该书针对JSP编程进行了全面且深入的讲解,旨在帮助读者掌握JSP的核心概念和技术,提升Web应用开发能力。根据提供的文件名列表,我们可以推测书籍的章节...

    [1120][赵强精通JSP编程][37M]

    根据提供的文件信息,我们可以推断出这是一份与Java Server Pages (JSP)相关的学习资料介绍,特别是关于赵强编写的《精通JSP编程》这本书的相关信息。下面将基于这个理解来生成相关知识点。 ### 一、JSP基础概念 ...

    游戏运营策划手册.pdf

    6. **数据分析**:利用大数据工具对用户行为进行深度分析,如用户活跃度、付费率、ARPU(平均每用户收入)、LTV(生命周期总价值)等指标,以评估运营效果并指导决策。 7. **社区建设**:建立和维护玩家社区,鼓励...

    赵强_微信购物首页改版用户调研1

    微信购物首页用户调研报告主要关注了微信购物首页用户的浏览动机、痛点以及不同用户群体的行为特征。报告通过定性和定量研究方法,包括一对一深访和问卷调查,收集了大量数据,旨在理解用户需求并优化用户体验。 ...

    Oracle学习笔记(传智播客 赵强)

    - `NULL`与`NULL`的比较总是返回`NULL`,所以不能直接用`WHERE colname=NULL`来查找NULL值,应使用`IS NULL`或`IS NOT NULL`。 - 在排序时,如果不希望NULL值排在最后或最前,可以使用`NULLS LAST`或`NULLS ...

    10天掌握MongoDB

    MongoDB的shell提供了强大的交互式环境,允许用户运行JavaScript脚本进行数据处理和分析。此外,用户还可以通过Shell的帮助命令获取操作指令和相关说明。 数据库、集合、文档的命名规范对于保证数据的组织和查询...

    LoadRunner性能测试巧匠训练营-完整版(带目录)-赵强邹伟伟

    《LoadRunner性能测试巧匠训练营》是一本深入讲解LoadRunner性能测试的教材,由赵强和邹伟伟两位专家共同编著。该资源提供的是完整版,且无需密码即可解压阅读,对于想要学习和提升LoadRunner性能测试技能的人来说,...

    Oracle数据库赵强视频教程【3天】

    教程名称:Oracle 数据库赵强视频教程【3天】教程目录:【】Oracle安装与管理、SQL语句(赵强)【】Orcale存储过程jdbc与Orcale大文本操作等(赵强)【】SQL简单查询触发器视图(赵强)  资源太大,传百度网盘了,链接在...

    day2013-0110-webLogic配置和集群(赵强).zip

    本资料包“day2013-0110-webLogic配置和集群(赵强).zip”包含了关于WebLogic的配置与集群搭建的详细教程,旨在帮助用户深入了解WebLogic的核心功能和管理技巧。 一、WebLogic基础配置 1. 安装与启动:首先,我们...

    精品资料(2021-2022年收藏)迅速提升品牌和销量的营销马步功0409赵强..doc

    - 竞争对手分析:评估其管理、营销、创新、生产和财务能力,识别问题和反应模式,使用SWOT分析法来评估优劣势和市场机会。 5. 确立竞争优势: - 企业可以通过总成本领先、差异化和聚焦战略来建立竞争优势。 - 总...

    从零开始oracle

    **数据仓库**:用于收集和存储历史数据以供分析使用的数据库。它包含了来自不同源系统的数据,并且经过清洗和整理,以便于进行决策支持分析。 **数据挖掘**:从大量数据中自动发现有意义的模式和规律的过程。常用的...

    八种编程语言毕业设计参考文献

    10. **汪赵强.《网页制作与JSP技术》**(2010):不仅介绍了JSP技术,还涵盖了网页制作的基本知识,适合Web开发初学者。 11. **孙卫琴.《Tomcat与JavaWeb开发技术详解》**(2009):详细介绍了Tomcat服务器以及与之...

    java代码-46 赖赵强

    【标题】"java代码-46 赖赵强" 暗示这是一份与Java编程相关的代码示例,可能由一位名为赖赵强的开发者编写或分享。这个标题可能指的是第46个编程练习、问题解决方案或者是某个功能模块的实现。在Java开发中,代码...

    九年级政治全册 3.7 依法享有财产继承权教案 苏教版-苏教版初中九年级全册政治教案.doc

    9. **财产继承的案例分析**:赵强的遗产继承涉及到养女赵娟、亲生儿子赵明、后妻及后妻的儿子,以及赵强的母亲。根据法定继承顺序,一般先由配偶、子女、父母继承,因此,养女赵娟、后妻及其儿子、母亲为第一顺序...

    无领导小组资源争夺类问题.pdf

    - **数据分析**: 使用具体数据或事实支持自己的观点。 - **案例引用**: 引用相似的成功案例来增强说服力。 - **沟通技巧**: 有效倾听他人观点,合理反驳不同意见,展现良好的团队合作精神。 - **结论总结**: ...

    精通Jsp编程

    在"精通Jsp编程"第七章中,作者赵强可能会详细讲解如何使用这些技术,并给出实际的源代码示例,帮助读者理解如何在实际项目中保持客户端状态。读者将学习到如何创建和管理Cookie,如何使用URL重写,以及何时何地使用...

Global site tag (gtag.js) - Google Analytics