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

  • 基础代码
相关推荐
谢亮_vipxieliang7 小时前
Go Gin 中间件与参数验证:从入门到实战
中间件·golang·gin
墨鱼老师8 天前
Go+Gin+Vue 毕设项目:Gin 框架搭建后端基础接口实战
vue.js·golang·go·gin·前后端分离·计算机毕业设计·go 后端
ttwuai10 天前
Golang Web后台管理框架推荐:Gin、GoFrame与数据面板项目怎么分
前端·golang·gin
EatFan11 天前
Go语言全栈实战:基于 Gin + Vue + JWT + RBAC 从零搭建前后端分离权限管理系统
vue.js·golang·go·vue·gin·jwt·rbac
数据库百宝箱11 天前
rum&gin索引对比
java·数据库·gin
ttwuai19 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
福兮说1 个月前
Gin 项目里的错误处理:让 Controller 不必知道错误是怎么来的
后端·go·gin·架构设计
妙码生花1 个月前
两个月 59 篇 AI 开发日志 + Golang 商业级实战项目收工后,得来的 AI 使用心法-上
前端·后端·gin