一道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,281評論 23 625
  • 青蘆細竹東坡上。繞梯徑、丘亭望,幾點蜻荷湖水漾。更添云淚, 斜風倚傍,一洗塵埃蕩。 勝春隨意都開放,自在珠簾醉清響...
    銓齋閱讀 470評論 5 23
  • 小灶群晨讀感悟 每個人的一天都有24小時,也只有24小時,但隨著我們越長越大,時間沒有變多,要做的事卻越來越多,所...
    逆向學習閱讀 228評論 0 0
  • 感情的事都可以回歸到最簡單的理論 你跟我在一起開心 那么你就會想靠近我 很自然的反應而已 如果你覺得跟我在一起不開...
    月亮的孩子夏天的蝎子閱讀 182評論 0 0
  • 知覺從來都不是在起床那一刻就擁有的。 比如我今天,是在走到地鐵口的時候內心活動才開始出現。 厭惡、憂傷、憤世嫉俗、...
    金炮老九閱讀 598評論 2 1