隨書筆記之一分鐘內連續登入超過3次就鎖定賬號

2021-08-08 02:38:30 字數 912 閱讀 7392

奧奧,這屬於看書隨筆,之前去面試有面試官問我這個問題:

一分鐘內登入超過3次就鎖定賬號。

當時考慮的動資料庫,有乙個登入失敗歷史表,欄位有:使用者1,登入時間12:00,失敗次數1

每次登入失敗的時候,查詢在本次登入時間1分鐘前的登入失敗記錄,如果沒有就記錄當前登入時間,使用者id,失敗次數初始化為1到資料庫

如果有失敗記錄,就查詢出來,對失敗次數做累加,當發現累加後失敗次數為4了,就鎖定賬號。

嗯嗯,其實這樣在大使用者下會有大量不可研究性的登入失敗歷史資料,沒啥用,而且在遭受攻擊的時候,也會頻繁的查詢,更新資料庫,容易造成資料庫宕機,系統不可用。

因此,目前考慮的是:

增加乙個reidis鍵值對,key是使用者的id,並對鍵的過期時間設定為60秒,當使用者登入失敗的時候就對鍵值對加1,當鍵值對的值超過3後就鎖定賬號

因為是連續登入,所以在使用者登入成功時,不管過期不過期,都需要刪除key,避免維護另一張無用表,並且避免了頻繁更新這個無用表。

這上面的思路是看到介面限流所想到的。

lua指令碼部分如下:

local key = keys[1]

local limit = tonumber(argv[1])

local current = tonumber(redis.call('get',key) or "0")

if(current + 1 > limit)

then

return 0

else

redis.call("incr",key)

--redis.call("expire",key,"5")

return 1

end執行方式如下:注意空格和逗號

/redis-cli -p 7009 --eval /users/yp-tc-m-7129/desktop/aa.lua key , 5

一分鐘sed入門(一分鐘系列)

1.簡介 sed是一種行編輯器,它一次處理一行內容。2.sed呼叫方式 sed options command file s sed options f scriptfile file s 第一種直接在命令列中執行,第二種把命令寫到了指令碼中,二者無本質區別。示例 1 列印hello.txt的內容 ...

一分鐘看懂mysql 一分鐘,看懂易貨

從20世紀80年代開始,易貨公司在美國加拿大 澳大利亞等國興起,成為這些國家減少現金用量 增加銷售 減少庫存 開發新客戶 開闢新市場 促進經濟發展的重要產業。也成為了企業消化庫存商品 剩餘生產能力 無形資產的有效方式和在遭遇資金瓶頸時的新選擇。2015年以來,中國線下易貨店開始了矇眼狂奔,在河南南陽...

一分鐘管理

有效而優秀管理者的 三板斧 一分鐘管理 你和下屬一起設定 一分鐘目標 確保他們知道自己應該做什麼,以及好的工作表現是什麼樣的。之後,你會努力發現他們做對了什麼事,好對他們進行 一分鐘稱讚 最後,如果你們完全有能力做好某件事,卻沒能做好,你就對他們進行 一分鐘批評 一分鐘目標 1.擬定3 5 個目標,...