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

  • 基础代码
相关推荐
水痕011 天前
gin结合minio来做文件存储
java·eureka·gin
一个热爱生活的普通人6 天前
解构 gin.Context:不止是 Context
后端·go·gin
Code季风8 天前
Gin 框架中的模板引擎使用指南
服务器·前端·gin
Code季风9 天前
深入理解 Gin 框架的路由机制:从基础使用到核心原理
ide·后端·macos·go·web·xcode·gin
zhuyasen10 天前
Sponge:一个重构Go开发体验的框架,让你在开发项目开"外挂"
go·gin·grpc
计算机毕设定制辅导-无忧学长17 天前
InfluxDB 与 Golang 框架集成:Gin 实战指南(一)
struts·golang·gin
阿祥~18 天前
FISCO BCOS Gin调用WeBASE-Front接口发请求
区块链·gin·fisocbocs
Code季风25 天前
Gin Web 服务与 Consul 集成实战:服务注册到发现全流程(下)
微服务·go·gin
车江毅1 个月前
bsfgo 一个轻量级的go gin框架,用于web站点和api开发【开源】
go·gin·web框架·bsf·bsfgo