redis统计各种活跃数据

前言:开发中有时候会遇到这种需求,比如获取系统当前在线人数,某篇文章的阅读数量等等,这个时候就需要进行数据统计。最简单的方法就是在登录接口、文章阅读接口中添加一个统计方法,进行数量+1的操作,但是访问量大了以后,对数据库承载量有一定影响,这个时候就需要用到redis了。

redis中有一个指令:setbit该指令的作用对于某个String类型的值,设置其指定偏移量(offset)上的值(只能是1和0)。

举个例子:假如一个字符串“z”,他的ASCII码是122,二进制是 0111 1010,offset 0就是从左往右数的第一位,offset 5就是从左往右数的第6位,这里执行几步操作:

首先设置一个String类型,key是"k",value是"z",,然后设置offset 6 为 0,offset 7 为 1,最后得到的结果就是 "y"。原因就是对字符串“z”的二进制码中的第6位和第七位重新设置了值,导致最后的结果变成了 0111 1001,这个刚好是字符串"y"的二进制码,对应的ascII码是121。

运用这个原理,假如有一个二进制是 1010 1010 1010 0101 0101 ,偏移量0的值是1,就表示id为0的用户已经登录,偏移量是1的值是0,就表示id为1的用户未登录。这样就可以实现活跃数据统计了。

 

设置活跃用户信息,直接使用setbit指令:

key:这里就是redis的key,根据实际开发中来设置,假如是每天的活跃,则可以 login:2020-4-14

offset:当前字符串的偏移量,这里就直接存储当前用户的唯一id(数字),

value:这里就直接存1或者0,1表示登录了,0表示未登录

模拟几次用户登录登出状态

这里执行了五步简单的操作,分别是用户id为1登录,2登录,3登录,4登录,最后2登出。

所以最后只有3个用户在线。只需要统计当前所有值为1的数量就好

统计偏移量为1的指令:BITCOUNT key

一共三个在线,这样就统计完成了。

假如想看某个用户有没有在线,可以用 

假如我想看用户1有没有在线,则

这就表示在线。

猜你喜欢

转载自blog.csdn.net/qq_39648029/article/details/105513855