美文网首页
一道Redis面试题

一道Redis面试题

作者: 刀尖红叶 | 来源:发表于2017-03-11 19:51 被阅读807次

    这道面试题是这样子的:

    请用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面试题

          本文链接:https://www.haomeiwen.com/subject/atdzgttx.html