zdpgo_gin_limit 为zdpgo_gin打造的接口限流框架,当API接口需要限制访问频率的时候可以使用此框架

zdpgo_gin_limit

为zdpgo_gin打造的接口限流框架,当API接口需要限制访问频率的时候可以使用此框架

安装

bash 复制代码
go get github.com/zhangdapeng520/zdpgo_gin_limit

使用教程

基于内存的限流

go 复制代码
package main

import (
	gin "github.com/zhangdapeng520/zdpgo_gin"
	limit "github.com/zhangdapeng520/zdpgo_gin_limit"
	"time"
)

func keyFunc(c *gin.Context) string {
	return c.ClientIP()
}

func errorHandler(c *gin.Context, info limit.Info) {
	c.String(429, "Too many requests. Try again in "+time.Until(info.ResetTime).String())
}

func main() {
	server := gin.Default()
	// This makes it so each ip can only make 5 requests per second
	store := limit.InMemoryStore(&limit.InMemoryOptions{
		Rate:  time.Second,
		Limit: 5,
	})
	mw := limit.RateLimiter(store, &limit.Options{
		ErrorHandler: errorHandler,
		KeyFunc:      keyFunc,
	})
	server.GET("/", mw, func(c *gin.Context) {
		c.String(200, "Hello World")
	})
	server.Run(":8080")
}

基于Redis的限流

go 复制代码
package main

import (
	gin "github.com/zhangdapeng520/zdpgo_gin"
	limit "github.com/zhangdapeng520/zdpgo_gin_limit"
	redis "github.com/zhangdapeng520/zdpgo_redis_v2"
	"time"
)

// 基于什么限流?
// 此函数返回用于限流的key
func keyFunc(c *gin.Context) string {
	return c.ClientIP()
}

// 错误处理
// 当被限流的时候返回此内容
func errorHandler(c *gin.Context, info limit.Info) {
	c.String(429, "Too many requests. Try again in "+time.Until(info.ResetTime).String())
}

func main() {
	server := gin.Default()
	// 这使得每个ip每秒只能发出5个请求
	store := limit.RedisStore(&limit.RedisOptions{
		RedisClient: redis.NewClient(&redis.Options{
			Addr: "localhost:6379",
		}),
		Rate:  time.Second, // 按秒限流
		Limit: 5,           // 每秒可以请求5次
	})
	mw := limit.RateLimiter(store, &limit.Options{
		ErrorHandler: errorHandler,
		KeyFunc:      keyFunc,
	})
	server.GET("/", mw, func(c *gin.Context) {
		c.String(200, "Hello World")
	})
	server.Run(":8080")
}

版本

v0.1.0

  • 基础代码
相关推荐
必胜刻20 小时前
一个异步生成游戏功能的落地复盘:Redis Stream + WebSocket + 状态补偿
redis·websocket·golang·gin·状态补偿
TE-茶叶蛋2 天前
B-tree vs GIN Trigram vs HNSW
gin
曾几何时`4 天前
Go(一)Gin框架 和 GORM机制
开发语言·golang·gin
老毛肚5 天前
Gin + GORM 接口可视化测试
gin
lolo大魔王5 天前
Gin 框架中间件超详细实战教程(原理、全局中间件、路由中间件、自定义中间件、跨域、日志拦截)
中间件·gin
lolo大魔王5 天前
Gin 框架响应格式与 HTML 模板渲染完整实战教程
前端·html·gin
必胜刻14 天前
Go 调用Coze工作流实现 AI 游戏生成
开发语言·ai·golang·gin
比特森林探险记16 天前
context 在 gRPC / Gin / K8s 中的实战
容器·kubernetes·gin
GoFly开发者17 天前
好消息!Gin+GORM-Gen开发框架已集成完成,正在进行测试和编写使用文档中,需要的开发朋友可以等待使用及订阅哦
gin·gorm·gorm-gen
Soonyang Zhang18 天前
nccl分析(三)——GPU-Initiated Networking(gin)数据发送过程分析
gin·nccl