題目:有一APP客戶端需要增加一個功能,限制用戶輸入密碼登陸次數1小時內不得超過5次嘗試,否則認為是在作弊,將予以保護不得用戶再繼續進行操作。
思路:此處應該加鎖,但是加鎖會影響登錄效率.看題目發現用戶id是作為傳入參數。所以我們可不可以拿用戶id作為一個鎖呢?這樣就只會鎖住該用戶,而不會鎖住別人.使用Redis作為緩存,key為用戶id。
其他邏輯處理代碼這里省略,只寫最關鍵的代碼塊:
int count = Integer.parseInt(countObj.toString()); //expire:設置key的時間,第三個參數是時間的單位,這里設置為"秒" if(count == 1) redisTemplate.expire("用戶id",30, TimeUnit.SECONDS); if(count <= 5) System.out.println(String.format("第%d次登錄成功", count)); else System.out.println("超過5次登陸,對不起不能這么頻繁登陸.");
這個解決方案是借助第三方組件實現的,主要從代碼效率方面考慮,隨着現代軟件的不斷發展,這樣代碼的思想使用會越來越廣,所以開發的時候一定要多思考再下手寫代碼。