ホームページ > バックエンド開発 > Golang > golang レートとは何ですか?料金利用の詳しい説明

golang レートとは何ですか?料金利用の詳しい説明

PHPz
リリース: 2023-04-11 10:14:31
オリジナル
1000 人が閲覧しました

Go 言語は、効率的で同時実行のシステムレベルのプログラミング言語です。 Rate パッケージは、さまざまな操作のレートを制御できる Go 言語の非常に便利なパッケージです。この記事では、Rate パッケージの使い方をよりよくマスターできるように、Rate パッケージの使用方法を紹介します。

1. Rate パッケージの概要

Rate パッケージは Go 言語の標準ライブラリに含まれるパッケージで、特定の操作を固定レートで実行するメソッドを提供します。たとえば、このパッケージを使用して、API リクエスト レートを制限したり、特定の操作が実行されるレートを制御したりすることができます。

このパッケージは、2 つの一般的なレート制限方法を提供します。1 秒あたりに特定の操作が実行されるレート、または単位時間あたりに特定の操作が実行されるレートを制限します。これら 2 つの制限方法は、それぞれのニーズに合わせて、Go 言語の time.Duration 型を使用して手動で自由に設定できます。

2. 基本的な使用法

1. 基本操作

Rate パッケージには、Allow() と Limit() という 2 つの操作があります。トークン バケット アルゴリズムの基本形式は、Allow() メソッドで定義されます。つまり、トークン バケット内にトークンがいくつあるかに応じて、定義された操作が許可されます。 Limit() は、使用済みトークンと使用可能なトークンを含む 2 つの値を返します。

2. 特定の操作を固定レートで実行する

操作ごとに特定の操作を固定レートで実行する必要がある場合、Rate パッケージはリミッター (操作の実行を制限するインスタンス) を提供します。一定のレートで API インターフェイスを使用します。例:

func main() {
    rate := rate.NewLimiter(10, 1)
    for i := 1; i <= 50; i++ {
        if rate.Allow() == false {
            fmt.Println("No allowance for", i)
            continue
        }
        fmt.Println("Hello", i)
    }
}
ログイン後にコピー

上記のコードでは、1 秒あたり 10 操作のレート制限で操作を実行するインスタンス レートを作成します。次に、ループして操作を 50 回実行します。操作が許可されていない場合、現在の操作はスキップされます。それ以外の場合は、Hello が実行され、操作の数とともに出力されます。

3. 一定の時間内での操作の実行を制限する

Rate パッケージは、1 秒あたりの固定操作速度で操作を制限することに加えて、次の方法も提供します。一定期間の個数制限。例:

func main() {
    limit := rate.NewLimiter(1, 1)
    duration := time.Minute
    operations := 10
    
    timeStart := time.Now()

    for i := 0; i < operations; i++ {
        if err := limit.Wait(ctx); err != nil {
            log.Fatalf("Error waiting on limiter: %v", err)
        }
        // Execute operation
    }

    timeEnd := time.Now()

    elapsedTime := timeEnd.Sub(timeStart)

    fmt.Printf("Executed %v operations in %v", operations, elapsedTime)
}
ログイン後にコピー

このコードでは、操作制限インスタンスを作成し、操作数を 1 分あたり 1 に制限します。オペレーション インスタンスは、オペレーションを実行できるという信号を待ってから、オペレーションを実行します。 ctx パラメーターの WithTimeout 関数を使用して、制限時間を他の値に設定することもできます。

4. バースト モードで操作を実行する

バースト モードで操作を実行する必要がある場合は、Bucket インスタンスを使用して実行できます。バケット インスタンスはリミッター インスタンスに似ていますが、バースト制御のしきい値が高くなります。

例:

func main() {
        b := rate.NewBucket(time.Second*1, 50)
        t := time.Now()
        for i := 0; i < 110; i++ {
                t = b.Take(1)
                fmt.Printf("i: %v t: %v\n", i, t.UnixNano())
        }
}
ログイン後にコピー

上記のコードでは、1 秒ごとに 50 操作のレート制限で操作を実行する Bucket インスタンスを作成します。次に、操作を 110 回ループします。バースト制御のしきい値は 50 であるため、最初の 50 個の操作はすぐに実行できます。ただし、バースト ウィンドウが 50 操作を超えないようにするために、後続の操作の実行時間を待ちます。

概要

Rate パッケージの基本的な使用法を習得し、上記の例を使用して、固定レート、期間ごと、およびバースト モードで操作を実行する方法を示しました。さらに、このパッケージには、操作速度をより適切に制御するのに役立つ他のいくつかの便利なメソッド (SetLimit() や LimitAt() など) が用意されています。命を大切にし、頻繁にアカウントが禁止されるリスクを避けてください。

以上がgolang レートとは何ですか?料金利用の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート