Cara melaksanakan pengehadan semasa API menggunakan bahasa Go dan Redis
Ikhtisar:
Dengan perkembangan pesat Internet, penggunaan antara muka API juga meningkat, dan sesetengah antara muka API mungkin menyebabkan kegagalan sistem disebabkan terlalu banyak permintaan Beban terlalu tinggi atau lumpuh. Untuk memastikan kestabilan dan kebolehpercayaan sistem, kami perlu mengehadkan aliran semasa antara muka API. Artikel ini akan memperkenalkan cara menggunakan bahasa Go dan Redis untuk melaksanakan fungsi pengehadan semasa API dan memberikan contoh kod khusus.
package main import ( "fmt" "github.com/go-redis/redis" "time" ) const ( MaxReqPerSec = 100 // 每秒最大请求数 ) func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // 如果有密码,填入密码 DB: 0, // 默认数据库 }) // 初始化令牌桶 client.Set("bucket", MaxReqPerSec, 0) // 模拟请求 for i := 0; i < 1000; i++ { if allowed, err := checkAPIRequest(client); allowed { // 执行API请求 fmt.Println("API request allowed") // .... } else { fmt.Println("API request denied") // .... } time.Sleep(time.Millisecond * 100) } } func checkAPIRequest(client *redis.Client) (bool, error) { val, err := client.Decr("bucket").Result() if err != nil { return false, err } if val < 0 { client.Incr("bucket") return false, nil } return true, nil }
Perihalan kod:
main
函数中,我们首先建立与Redis的连接,并初始化了一个令牌桶,设置每秒最大请求数量为100。checkAPIRequest
函数用于检查是否允许进行API请求。在每次请求时,我们通过client.Decr("bucket")
操作从令牌桶中取出一个令牌,如果令牌数量小于0,则表示不能进行请求,需要向令牌桶中添加令牌,并返回false。如果令牌数量大于等于0,则表示允许进行请求,并返回true。main.go
文件,使用命令行进入文件所在目录,执行go run main.go
checkAPIRequest
digunakan untuk menyemak sama ada permintaan API dibenarkan. Pada setiap permintaan, kami mengeluarkan token daripada baldi token melalui operasi client.Decr("baldi")
Jika bilangan token kurang daripada 0, ini bermakna permintaan itu tidak boleh dibuat dan anda perlu meminta token Tambah token ke baldi dan kembalikan palsu. Jika bilangan token lebih besar daripada atau sama dengan 0, permintaan itu dibenarkan dan benar dikembalikan. Jalankan kod
Simpan kod di atas sebagai fail main.go
, gunakan baris arahan untuk memasuki direktori di mana fail itu terletak dan laksanakan go run main.go
untuk menjalankan kod. Program ini akan mensimulasikan 100 permintaan, dengan selang 100 milisaat antara setiap permintaan. Mengikut bilangan maksimum permintaan yang ditetapkan, 100 permintaan pertama harus dibenarkan dan permintaan seterusnya harus ditolak.
Atas ialah kandungan terperinci Cara melaksanakan pengehadan semasa API menggunakan bahasa Go dan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!