一道Redis面試題

這道面試題是這樣子的:

請用Redis和任意語言實現(xiàn)一段惡意登錄保護的代碼,限制1小時內(nèi)每用戶Id最多只能登錄5次。具體登錄函數(shù)或功能用空函數(shù)即可,不用詳細寫出。

我乍看下覺得像是面試開發(fā)的題~
花了一下午了解了下redis,發(fā)現(xiàn)這貨似乎蠻簡單的,而且有哈希和列表數(shù)據(jù)結(jié)構(gòu).我一開始想用哈希,每個用戶為key,登陸時間為value,統(tǒng)計下now和now-1h之間的key數(shù)目是否大于5,類似這樣的sql
select count(user) from user_log where access between date_sub(now, interval 1 hour) and now().
但感覺這種范圍查找會比較慢.后來覺得用列表是個好方法:列表中每個元素代表登陸時間,只要最后的第5次登陸時間和現(xiàn)在時間差不超過1小時就禁止登陸.用Python寫的代碼如下,感覺蠻簡練的,如果網(wǎng)友有更巧妙的方法,歡迎指教.

#!/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()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文將從Redis的基本特性入手,通過講述Redis的數(shù)據(jù)結(jié)構(gòu)和主要命令對Redis的基本能力進行直觀介紹。之后概...
    kelgon閱讀 61,652評論 23 625
  • 青蘆細竹東坡上。繞梯徑、丘亭望,幾點蜻荷湖水漾。更添云淚, 斜風(fēng)倚傍,一洗塵埃蕩。 勝春隨意都開放,自在珠簾醉清響...
    銓齋閱讀 659評論 5 23
  • 小灶群晨讀感悟 每個人的一天都有24小時,也只有24小時,但隨著我們越長越大,時間沒有變多,要做的事卻越來越多,所...
    逆向?qū)W習(xí)閱讀 287評論 0 0
  • 感情的事都可以回歸到最簡單的理論 你跟我在一起開心 那么你就會想靠近我 很自然的反應(yīng)而已 如果你覺得跟我在一起不開...
    月亮的孩子夏天的蝎子閱讀 200評論 0 0
  • 知覺從來都不是在起床那一刻就擁有的。 比如我今天,是在走到地鐵口的時候內(nèi)心活動才開始出現(xiàn)。 厭惡、憂傷、憤世嫉俗、...
    金炮老九閱讀 676評論 2 1

友情鏈接更多精彩內(nèi)容