redis服务器信息统计,利用Redis统计网站在线活跃用户的方法

前言

在工作中我们经常遇到这样的需求,要对某个在线网站的活跃用户数量进行统计。这里我们以redis为例,说明一下其实现的过程。

实现方法

在Redis中存在bitmap这种数据类型,这种数据类型是建立在string数据类型之上的。这里,我们主要用到setbit、bitcount这2个命令,而使用的客户端为python的redis库。

?

这里我们引入redis库,然后实例化了1个StrictRedis类。由于这里使用的默认的选项,我们可以在StrictRedis不传入任何参数。

?

这里我们定义3个方法storeDailyVisit,removeDailyVisit和countVisits,分别用于用户上线时进行记录、用户下线时进行记录以及查看指定日期活跃的用户总数。

下面我们来看storeDailyVisit函数:

?

该函数接收2个参数date和userId,分别为指定的日期和用户的ID,第3个参数用于指定是否输出内容。在这里我们输出用户访问的信息,当然我们可以将其记录在日志中等其他操作。

当某个用户登录后,我们调用该函数,传入今天的日期及用户的ID。removeDailyVisit函数与storeDailyVisit函数类似,它主要负责当用户退出当前网站时将其从bitmap表中移除。

?

下面我们通过countVisits函数得到当前活跃的用户的数量:

?

这里,countVisits函数接收1个日期的参数,它通过调用bitmaps数据类型的bitcount函数得到当前数字为1的个数。这里我们将它返回给调用者。

由于bitmaps是1种按位进行操作的数据类型,其是1串连续的二进制数字(0或1)。我们通过对其某个位上的数值进行设置为1,然后通过bitcount函数统计这串二进制数字上为1的总数,从而得到当前活跃的用户总数。

另外,我们还可以使用redis的set数据类型来实现同样的操作,我们可以通过下表来查看这二者的差别:

?

我们可以清楚的看到,当存储的用户为5个亿的时候,需要消耗的内存bitmap为59.6MB,而set为1.91TB,整整32倍。因此,在实际的在线网站中,我们更多使用的是bitmaps统计在线用户的数量。

参考文章:http://redis.io/topics/data-types-intro#bitmaps

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Primer 有感(new和delete表达式)

定义变量时,必须指定其数据类型和名字。而动态创建对象时,只需指定其数据类型,而不必为该对象命名。取而代之的是,new表达式返回指向性创建的指针。1.动态创建对象的默认初始化对于类类型的对象,用该类的默认构造函数初…

win10没有windows无线服务器,win10系统电脑没windows无线服务的解决方法

很多小伙伴都遇到过win10系统电脑没windows无线服务的困惑吧,一些朋友看过网上零散的win10系统电脑没windows无线服务的处理方法,并没有完完全全明白win10系统电脑没windows无线服务是如何解决的,今天小编准备了简单的解决办法,只…

初学者的机器学习入门实战教程!

原文链接:https://www.pyimagesearch.com/2019/01/14/machine-learning-in-python/ 作者:Adrian Rosebrock 这是一篇手把手教你使用 Python 实现机器学习算法,并在数值型数据和图像数据集上运行模型的入门教程,当你看完本文后&…

JAVA面试题集

基础知识: 1.C或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;…

原生js实现一个tab栏的标签操作

我是歌谣 闲来无事做 就不如写写代码 本次不过多对原生的操作进行说法 我们直接上代码 效果图 有一个index.html的文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatib…

搜索和在线阅读 Github 代码的插件推荐

2019 年第 31 篇&#xff0c;总 55 篇文章上一篇文章 推荐了 3 个 Github 相关的项目&#xff0c;这次继续推荐 3 个项目&#xff0c;严格说是 3 个插件&#xff0c;主要是帮助搜索 Github 项目和在线阅读代码的插件。1. GitHunt第一个是帮助搜索在指定时间内 Star 数量增长最多…

下载开发证书步骤(自用备忘)

下开发证书步骤 1.https://developer.apple.com/cn/ 2.https://developer.apple.com/devcenter/ios/index.action 3.Certificates, Identifiers & Profiles 4.Provisioning Profiles 转载于:https://www.cnblogs.com/joesen/p/3158284.html

磁盘阵列服务器Intel C610系列,超微6048R-E1CR36N 36盘位存储服务器 磁盘阵列

Key Features1. Dual socket R3 (LGA 2011) supportsIntel Xeon processor E5-2600v4†/ v3 family; QPI up to 9.6GT/s2. Up to 3TB† ECC 3DS LRDIMM , up toDDR4- 2400†MHz ; 24x DIMM slots3. 2 PCI-E 3.0 x16, 3 PCI-E 3.0 x8.1 PCI-E 2.0 x4 (in x8)Slot 3 &4 occup…

手动封装element-ui里面的button组件

首先我们知道vue里面包含有父子组件 但是你知道如果要进行一个element的手动组件封装 怎么封装吗 1首先第一步 首先我们建立一个组件 最好设置在一个文件目录下比如components 只是一个普通的组件 叫做OneButton.vue <template><button class"one-button&…

GIS数据里的4D数据

数字高程模型&#xff08;Digital Elevation Model&#xff0c;缩写DEM&#xff09;是在某一投影平面&#xff08;如高斯投影平面&#xff09;上规则格网点的平面坐标&#xff08;X&#xff0c;Y&#xff09;及高程&#xff08;Z&#xff09;的数据集。DEM的格网间隔应与其高程…

Python 基础入门--简介和环境配置

2019 年第 32 篇&#xff0c;总 56 篇文章本文大约 1w 字&#xff0c;建议收藏阅读上周结束了如何构造一个机器学习项目的系列文章&#xff0c;当然还有一篇简单的总结以及介绍一些入门的学习资料&#xff0c;不过还在整理&#xff0c;应该这周内会整理好的。现在是系统的整理学…

这些单词你都念对了吗?顺便推荐三份程序员专属英语教程!

2019 第 36 篇文章&#xff0c;总第 60 篇文章本文大约 3500 字&#xff0c;阅读大约需要 9 分钟作为程序员&#xff0c;除了要有好的编程能力&#xff0c;计算机基础&#xff0c;还必须具备一定的英语能力&#xff0c;至少能看懂和计算机编程相关的英语&#xff0c;可以在谷歌…

curl

转载于:https://www.cnblogs.com/MyFlora/p/3164687.html

机器学习入门学习资料推荐

今天介绍一些机器学习的学习资料&#xff0c;主要是分为以下几个方面的内容&#xff1a; 编程语言&#xff1a;实现机器学习&#xff0c;主要是介绍 Python 方面的语言&#xff1b;书籍&#xff1a;看书通常是入门的一种方法&#xff0c;比较适合自律性强的同学&#xff1b;视…

看视频时,类加载器没太理解,现在再整理下几个要点

类加载器负责把类加载到java虚拟机即JVM中&#xff0c;指定类的名称&#xff0c;类加载器就会定位这个类的定义&#xff0c;每一个java类必须由类加载器加载。 当启动JVM的时候&#xff0c;我们可以使用三个类加载器&#xff1a;引导类加载器、扩展类加载器、应用程序类加载器 …