Redis使用シーン:認証コードの送信回数を制限する

824 ワード

プロジェクトにはメール認証コードを送信する機能が必要であるが,毎日制限コードを送信する回数を制限する必要があり,Redisのincrコマンドで実現できる.
incrコマンド:
指定されたkeyに格納された数値に対して原子の加算1操作を行う.
指定したkeyが存在しない場合、incr操作を実行する前に、その値を0に設定します.
戻り値は、インクリメント操作が実行された後のkeyに対応する値である.
コード:
 long count = redisTemplate.opsForValue().increment(mobile.concat(RedisKeyConstant.SMS_COUNT),1);
if (count > 5 ) {
      throw new ServiceException("        !");
} else {
      //          
       Duration duration = Duration.between(LocalDateTime.now(), LocalDate.now().plusDays(1).atTime(0,0,0));
          redisTemplate.expire(mobile.concat(RedisKeyConstant.SMS_COUNT),duration.toMinutes(),TimeUnit.MINUTES);
 }

Redisはシリアルで実行されるため、incrementはkey値のvalueに1を加えるたびに、5回を超えると異常を投げ出し、プロンプト操作が頻繁に行われ、そうでなければ翌日の未明まで有効時間を設定します.