Go 限流—滑动窗口

该博客介绍了如何在Go中实现滑动窗口限流,包括本地限流和分布式限流的方法。通过Redis存储窗口计数,并利用Sync方法实现数据同步,确保在分布式环境中进行全局限流。
摘要由CSDN通过智能技术生成

slidingwindow 安装

$ go get -u github.com/RussellLuo/slidingwindow

快速开始

1、本地限流

package main

import (
	"fmt"
	"github.com/RussellLuo/slidingwindow"
	"time"
)

const (
	d          = 100 * time.Millisecond
	windowSize = time.Second
)

var (
	t0 = time.Now().Truncate(windowSize)
	t1 = t0.Add(1 * d)
	t2 = t0.Add(2 * d)
	t5 = t0.Add(5 * d)
)

func main() {
   
	limiter, _ := slidingwindow.NewLimiter(windowSize, 10, func() (slidingwindow.Window, slidingwindow.StopFunc) {
   
		return slidingwindow.NewLocalWindow()
	})

	tests := []struct {
   
		t  time.Time
		n  int64
		ok bool
	}{
   
		// prev-window: empty, count: 0
		// curr-window: [t0, t0 + 1s), count: 0
		{
   t0, 1, true},
		{
   t1,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值