当前位置: 首页 > 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

  • 基础代码

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 公主少爷都爱看的haproxy七层代理详细介绍及常见实验详解
  • 学懂C++ (十九):高级教程——深入详解C++信号处理
  • 初识C++ · C++11(2)
  • 若依 ruoyi 单体双token(url区分)
  • Linux 软件编程学习第十一天
  • 使用RPC服务的步骤
  • python打怪练习
  • UEFI ——Firmware层级结构
  • [数据集][目标检测]轴承缺陷划痕检测数据集VOC+YOLO格式1166张1类别
  • wordpress评论ip异常问题
  • 美团面经到店研发
  • 微服务的多面手:Spring Cloud 多数据中心支持全解析
  • 使用Python+moviepy保存截取视频画面
  • javaweb_07:分层解耦
  • Java之TCP编程综合案例
  • [LeetCode] Wiggle Sort
  • CODING 缺陷管理功能正式开始公测
  • C语言笔记(第一章:C语言编程)
  • ES6 学习笔记(一)let,const和解构赋值
  • Promise初体验
  • springboot_database项目介绍
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • vue数据传递--我有特殊的实现技巧
  • Wamp集成环境 添加PHP的新版本
  • Web Storage相关
  • windows下如何用phpstorm同步测试服务器
  • 分享几个不错的工具
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 猴子数据域名防封接口降低小说被封的风险
  • 技术发展面试
  • 树莓派 - 使用须知
  • 为视图添加丝滑的水波纹
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 06-01 点餐小程序前台界面搭建
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • Spring Batch JSON 支持
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​TypeScript都不会用,也敢说会前端?
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #nginx配置案例
  • #QT(QCharts绘制曲线)
  • (02)vite环境变量配置
  • (1)虚拟机的安装与使用,linux系统安装
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (done) 两个矩阵 “相似” 是什么意思?
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (蓝桥杯每日一题)love
  • (力扣题库)跳跃游戏II(c++)
  • (六)vue-router+UI组件库
  • (论文阅读40-45)图像描述1
  • (四) Graphivz 颜色选择
  • (循环依赖问题)学习spring的第九天
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)UDP基本编程步骤