一道Redis面试题

这道面试题是这样子的:

请用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次。具体登录函数或功能用空函数即可,不用详细写出。

我乍看下觉得像是面试开发的题~
花了一下午了解了下redis,发现这货似乎蛮简单的,而且有哈希和列表数据结构.我一开始想用哈希,每个用户为key,登陆时间为value,统计下now和now-1h之间的key数目是否大于5,类似这样的sql
select count(user) from user_log where access between date_sub(now, interval 1 hour) and now().
但感觉这种范围查找会比较慢.后来觉得用列表是个好方法:列表中每个元素代表登陆时间,只要最后的第5次登陆时间和现在时间差不超过1小时就禁止登陆.用Python写的代码如下,感觉蛮简练的,如果网友有更巧妙的方法,欢迎指教.

#!/usr/bin/env python3
import redis  
import sys  
import time

r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)  
try:  
    id = sys.argv[1]
except:  
    print('input argument error')
    sys.exit(0)


if r.llen(id) >= 5 and time.time() - float(r.lindex(id, 4)) <= 3600:  
    print("you are forbidden logining")
else:  
    print('you are allowed to login')
    r.lpush(id, time.time())
    # login_func()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,238评论 23 625
  • 青芦细竹东坡上。绕梯径、丘亭望,几点蜻荷湖水漾。更添云泪, 斜风倚傍,一洗尘埃荡。 胜春随意都开放,自在珠帘醉清响...
    铨斋阅读 452评论 5 23
  • 小灶群晨读感悟 每个人的一天都有24小时,也只有24小时,但随着我们越长越大,时间没有变多,要做的事却越来越多,所...
    逆向学习阅读 227评论 0 0
  • 感情的事都可以回归到最简单的理论 你跟我在一起开心 那么你就会想靠近我 很自然的反应而已 如果你觉得跟我在一起不开...
    月亮的孩子夏天的蝎子阅读 180评论 0 0
  • 知觉从来都不是在起床那一刻就拥有的。 比如我今天,是在走到地铁口的时候内心活动才开始出现。 厌恶、忧伤、愤世嫉俗、...
    金炮老九阅读 594评论 2 1