利用redis的bitmap实现用户签到功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了利用redis的bitmap实现用户签到功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2144字,纯文字阅读大概需要4分钟。
内容图文
![利用redis的bitmap实现用户签到功能](/upload/InfoBanner/zyjiaocheng/891/e3e8af96fa0c49068e8a5a21aa619c71.jpg)
import datetime
import redis
class RedisSignIn():
def __init__(self):
# 连接redis数据库
self.redis_store = redis.Redis(
host="127.0.0.1",
port='6379',
db="1"
)
@staticmethod
def GetDaliySignKey(time=datetime.datetime.now()):
# 拼接redis的key
bitmap_key_daily_sign = "daily_sign_{date}" # daily_sign_2019-09-16
return bitmap_key_daily_sign.format(date=time.date())
def UserDailySign(self, user_id):
# 今日签到并获取本周签到记录
sing_status = self.UserDaliySignByUserId(user_id)
if not sing_status:
pass
# return "今日已签到"
# 获取本周签到记录
rec,l = self.GetSignRecordByUserId(user_id, 7)
print(rec)
print(l)
return l,rec
# 获取指定时间段的签到记录
def GetSignRecordByUserId(self, user_id, days=30):
# 开启管道模拟事务
with self.redis_store.pipeline(True) as p:
for i in range(days):
# 获取key对应值的二进制表示中的某位的值
p = p.getbit(self.GetDaliySignKey(datetime.datetime.now() - datetime.timedelta(days=i)), user_id)
# execute返回命令执行结果列表
res = p.execute()
# res是一个[1,0,0,0...]的列表
print('res',res)
# 转成字符串的二进制
print(sum(res))
return ''.join([str(x) for x in res]),sum(res)
# 通过user_id用户做每日签到
def UserDaliySignByUserId(self, user_id):
if self.GetDailySignByUserId(user_id):
print( "今天您已签到")
return False
# 今日签到
key = self.GetDaliySignKey()
# key就是签到日期,将该user_id在key对应的位置上设置为1,表示签到了
self.redis_store.setbit(key, user_id, 1)
# 设置key的过期时间
self.redis_store.expire(key, 60 * 60 * 24 * 30)
return True
# 通过user_id获取用户每日签到信息
def GetDailySignByUserId(self, user_id):
return self.redis_store.getbit(self.GetDaliySignKey(), user_id)
if __name__ == '__main__':
user_id=1003
sign=RedisSignIn()
sign.UserDailySign(user_id)
# sign.GetSignRecordByUserId(user_id)
内容总结
以上是互联网集市为您收集整理的利用redis的bitmap实现用户签到功能全部内容,希望文章能够帮你解决利用redis的bitmap实现用户签到功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。