Go实现网站访问量控制(滑动窗口算法,类似利用Redis List数据结构属性)

栏目: Go · 发布时间: 5年前

内容简介:对于用户访问频率控制,比如每分钟,只允许访问多少次,方法很多。较为精准的就有比如“利用Redis实现访问控制频率”,还有就是RateLimiter(令牌桶算法)等。

对于用户访问频率控制,比如每分钟,只允许访问多少次,方法很多。较为精准的就有比如“利用 Redis 实现访问控制频率”,还有就是RateLimiter(令牌桶算法)等。

visitercontrol  介绍:

https://github.com/yudeguang/visitercontrol ,可实现单位时间内,最多允许多少用户访问,可以以IP或者用户名等作为区分用户。与RateLimiter不同,visitercontrol可以实现较为精确的流量限制。与Redis相比,其效率远远高于Redis,Redis每秒大致只能实现十万级别的读写。

对于访问控制,分为两种,一种是简单规则,一种是复杂规则,复杂规则其实就是多个简单规则的叠加,并同时作用在同一用户身上。

主要核心函数如下:

package visitercontrol

import "github.com/yudeguang/visitercontrol"

Index

type MultipleVisitercontrol

type MultipleVisitercontrol struct {
    // contains filtered or unexported fields
}

func NewMultipleVisitercontrol

func NewMultipleVisitercontrol(multipleRule ...<a href="https://www.godoc.org/github.com/yudeguang/visitercontrol#Rule">Rule</a>) *<a href="https://www.godoc.org/github.com/yudeguang/visitercontrol#MultipleVisitercontrol">MultipleVisitercontrol</a>

初始化一个多重规则的频率控制策略 例: multipleVc := NewMultipleVisitercontrol(Rule{time.Minute * 5, 20, 100}, Rule{time.Minute * 30, 50, 1000}, Rule{time.Hour * 24, 200, 10000}) 它表示: 在5分钟内每个用户最多允许访问20次,并且我们预计在这5分钟内大致有100个用户会访问我们的网站 在30分钟内每个用户最多允许访问50次,并且我们预计在这30分钟内大致有1000个用户会访问我们的网站 在24小时内每个用户最多允许访问200次,并且我们预计在这24小时内大致有10000个用户会访问我们的网站 以上任何一条规则的访问次数超出,都不允许访问,并且我们在匹配规则时,是按时间段从小到大匹配

func (*MultipleVisitercontrol) AllowVisit

func (this *<a href="https://www.godoc.org/github.com/yudeguang/visitercontrol#MultipleVisitercontrol">MultipleVisitercontrol</a>) AllowVisit(key interface{}) <a href="https://www.godoc.org/builtin#bool">bool</a>

是否允许访问,允许访问则往访问记录中加入一条访问记录 例: AllowVisit("usernameexample")

func (*MultipleVisitercontrol) AllowVisitIP

func (this *<a href="https://www.godoc.org/github.com/yudeguang/visitercontrol#MultipleVisitercontrol">MultipleVisitercontrol</a>) AllowVisitIP(ip <a href="https://www.godoc.org/builtin#string">string</a>) <a href="https://www.godoc.org/builtin#bool">bool</a>

是否允许某IP的用户访问 例: AllowVisitIP("127.0.0.1")

用于NewMultipleVisitercontrol函数的初始化

type SingleVisitercontrol

type SingleVisitercontrol struct {
    // contains filtered or unexported fields
}

某单位时间内允许多少次访问

func NewSingleVisitercontrol

func NewSingleVisitercontrol(defaultExpiration <a href="https://www.godoc.org/time">time</a>.<a href="https://www.godoc.org/time#Duration">Duration</a>, numberOfAllowedAccesses, estimatedNumberOfOnlineUsers <a href="https://www.godoc.org/builtin#int">int</a>) *<a href="https://www.godoc.org/github.com/yudeguang/visitercontrol#SingleVisitercontrol">SingleVisitercontrol</a>

初始化一个单规则频率控制策略 例: vc := NewSingleVisitercontrol(time.Minute*30, 50, 1000) 它表示: 在30分钟内每个用户最多允许访问50次,并且我们预计在这30分钟内大致有1000个用户会访问我们的网站

func (*SingleVisitercontrol) AllowVisit

func (this *<a href="https://www.godoc.org/github.com/yudeguang/visitercontrol#SingleVisitercontrol">SingleVisitercontrol</a>) AllowVisit(key interface{}) <a href="https://www.godoc.org/builtin#bool">bool</a>

是否允许访问,允许访问则往访问记录中加入一条访问记录 例: AllowVisit("usernameexample")

func (*SingleVisitercontrol) AllowVisitIP

func (this *<a href="https://www.godoc.org/github.com/yudeguang/visitercontrol#SingleVisitercontrol">SingleVisitercontrol</a>) AllowVisitIP(ip <a href="https://www.godoc.org/builtin#string">string</a>) <a href="https://www.godoc.org/builtin#bool">bool</a>

是否允许某IP的用户访问 例: AllowVisitIP("127.0.0.1")


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者

创新者

[美] 沃尔特 · 艾萨克森 / 关嘉伟、牛小婧 / 中信出版社 / 2016-6 / 88.00

讲述了计算机和互联网从无到有的发展历程,并为我们生动地刻画出数字时代的创新者群像。 在近200年的数字化进程中群星闪耀,艾萨克森从一个计算机程序的创造者、诗人拜伦之女埃达说起,细数了这一群站在科学与人文交叉路口的创新者,他们包括通用型电子计算机的创造者奠奇利、科学家冯·诺依曼、仙童半导体公司的“八叛逆”、天才图灵、英特尔的格鲁夫、微软的比尔·盖茨、苹果公司的乔布斯、谷歌的拉里·佩奇等。《创新......一起来看看 《创新者》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具