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

  • 基础代码
相关推荐
kite01212 小时前
GIn + Casbin: RBAC 权限控制系统集成
gin·jwt·casbin
王家视频教程图书馆4 天前
go语言 gin grom jwt 登陆token验证 增删改查 分页 完整 图书管理系统
gin
liuyunshengsir6 天前
golang Gin 框架下的大数据量 CSV 流式下载
开发语言·golang·gin
我不是8神12 天前
gin与gorm框架知识点总结
ios·iphone·gin
西京刀客12 天前
golang路由与框架选型(对比原生net/http、httprouter、Gin)
http·golang·gin
天天向上102418 天前
在 Go 的 Gin Web 框架中,获取 HTTP 请求参数有多种方式
前端·golang·gin
迷途的小子23 天前
go-gin binding 标签详解
java·golang·gin
L Jiawen25 天前
【Go · Gin】基础知识
开发语言·golang·gin
ChineHe25 天前
Gin框架基础篇009_日志中间件详解
golang·web·gin
昵称为空C1 个月前
go+gin 入门指南
go·gin