模拟redis位图操作bitmap 统计日活跃用户数
假设一年有100天以上登录过,则为活跃用户
import redis
#连接redis
r =redis.Redis(host='redis数据库服务器IP地址',port=6379,db='数据库号')
#模拟4个用户,user:001和user: 002非活跃,user:003和user:004为活跃
#设置指定位的值: setbit(key,offset,value)
r.setbit('user:001',0,1)
r.setbit('user:001',29,1)
r.setbit('user:002',199,1)
#假设一个每隔两天登录一次,一个每隔三天登录一次
for i in range(0,365,2):
r.setbit('user:003,i,1)
for i in range(0,365,3):
r.setbit('user:004',i,1)
#将所有用户放到列表中:keys xxx*/keys * 查看键,得到的是列表,里面装的是字节串
#use_list = [b'user:001',b'user:002',...]
user_list = r.keys('user:*')
#最终结果格式:
#活跃用户:[('user:003',xxx),('user:004',xxx)]
active_users = []
inactive_users = []
#统计每个用户一年中总访问次数:bitcount key 统计键所对应的值中有多少个1
for user in user_list:
count = r.bitcount(user)
if count >= 100:
active_users.append((user.decode(),count))
else:
inactive_user.append((userdecode(),count))
print('活跃用户:',active_users)
print('非活跃用户:',inactive_users)