京东电子商务网站建设,wordpress崩溃,郑州网站加工,手机app下载平台哪个好zdpgo_gin_limit
为zdpgo_gin打造的接口限流框架#xff0c;当API接口需要限制访问频率的时候可以使用此框架
安装
go get github.com/zhangdapeng520/zdpgo_gin_limit使用教程
基于内存的限流
package mainimport (gin github.com/zhangdapeng520/zdpgo_gin…zdpgo_gin_limit
为zdpgo_gin打造的接口限流框架当API接口需要限制访问频率的时候可以使用此框架
安装
go get github.com/zhangdapeng520/zdpgo_gin_limit使用教程
基于内存的限流
package mainimport (gin github.com/zhangdapeng520/zdpgo_ginlimit github.com/zhangdapeng520/zdpgo_gin_limittime
)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 secondstore : 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的限流
package mainimport (gin github.com/zhangdapeng520/zdpgo_ginlimit github.com/zhangdapeng520/zdpgo_gin_limitredis github.com/zhangdapeng520/zdpgo_redis_v2time
)// 基于什么限流
// 此函数返回用于限流的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
基础代码