当前位置: 首页 > news >正文

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

zdpgo_gin_limit

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

安装

go get github.com/zhangdapeng520/zdpgo_gin_limit

使用教程

基于内存的限流

package mainimport (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 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_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

  • 基础代码
http://www.lryc.cn/news/419607.html

相关文章:

  • Java1234的Vue学习笔记
  • 嵌入式八股-C++面试91题(20240809)
  • 如何恢复误删视频?找回误删视频文件的办法分享
  • 游戏手柄开发一款游戏
  • 【阿旭机器学习实战】【39】脑肿瘤数据分析与预测案例:数据分析、预处理、模型训练预测、评估
  • 深度学习基础 - 梯度垂直于等高线的切线
  • py2exe打包
  • Gerrit存在两个未审核提交且这两个提交有冲突时的解决方案
  • 基于单片机的智能风扇设计
  • 【实战】Spring Security Oauth2自定义授权模式接入手机验证
  • Redis数据失效监听
  • 【达梦数据库】-SQL调优思路
  • DispatcherServlet 源码分析
  • 代码随想录算法训练营第十八天| 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先
  • 会议室占用的时间(75%用例)D卷(JavaPythonC++Node.jsC语言)
  • C++初阶_1:namespace
  • 低代码开发平台:效率革命还是质量隐忧?
  • 在 Django 表单中传递自定义表单值到视图
  • Android之复制文本(TextView)剪贴板
  • Ubuntu24.04设置国内镜像软件源
  • 分布式与微服务详解
  • Vue设置滚动条自动保持到最底端
  • uniapp创建一个新项目并导入uview-plus框架
  • LabVIEW光电在线测振系统
  • 分布式光伏电站 转化能源 丰富用电结构
  • 环境配置:如何在IntelliJ IDEA中安装和修改JDK版本配置(以Windows为例)
  • Spring AOP 原理——代理模式
  • leetcode 234.回文链表
  • AD中Split Planes 的作用和功能
  • [linux][命令]linux文件操作命令大全