0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Redisを使ったレート制限をReadyする

0
Last updated at Posted at 2025-12-22

はじめに

Web APIを運用していると、次のような課題に直面することがあります。

  • 同一ユーザーからの過剰アクセス
  • ボットやスクレイピング対策
  • 外部APIの呼び出し回数制限
  • 意図しない負荷による障害

これらを防ぐためによく使われる仕組みが レート制限(Rate Limiting) と呼ばれるものです。
今回はRedisを使ったレート制限の実装についてまとめてみます。

そもそもRedisとは

Redisはインメモリデータベースの一種になります。
通常のRDB(リレーショナルデータベース)とは異なりメモリ上でデータを管理します。
メモリ上でデータを管理するので、データに関する処理(保存・取得)が早いのが特徴となります。

またRedisはキー・バリューストア型のデータ構造をしています。
image.png
キーはデータにアクセスする際に参照するものであり、バリューは実際のデータになります。

こちらの記事は非常に分かりやすいので引用させていただきます!

Redisを使ったレート制限

シンプルなカウンターのデータを持つことで回数を制限することができます。

FUNCTION LIMIT_API_CALL(ip) // IPアドレスを引数に取る
ts = CURRENT_UNIX_TIME() // 現在の時間(秒)を取得
keyname = ip+":"+ts // IPアドレス+秒のKeyを作成
MULTI
    INCR(keyname) // Keyがなければ新規作成。KeyがあればValueを1増やす
    EXPIRE(keyname,10) // Keyの有効期限は10秒
EXEC
current = RESPONSE_OF_INCR_WITHIN_MULTI // 現在のValueの値を取得
IF current > 10 THEN // Valueが10超えている場合はエラー
    ERROR "too many requests per second"
ELSE
    PERFORM_API_CALL() // 処理を続行
END

終わりに

APIごとにレート制限を設けることで、DDoSのような攻撃による過剰な負荷発生リスクを抑えることできます!
他にも外部APIと連携が含まれるAPIなどは過剰なアクセスがあると、外部API側のレート制限に引っかかってしまう可能性もあるため、アプリ側にもレート制限を設けることが有効です!
最後まで読んでいただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?