一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - go redis實現滑動窗口限流的方式(redis版)

go redis實現滑動窗口限流的方式(redis版)

2021-02-26 00:48陶士涵 Golang

這篇文章主要介紹了go redis實現滑動窗口限流的方式(redis版),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

之前給大家介紹過單機當前進程的滑動窗口限流 , 這一個是使用go redis list結構實現的滑動窗口限流 , 原理都一樣 , 但是支持分布式

原理可以參考之前的文章介紹

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func LimitFreqs(queueName string, count uint, timeWindow int64) bool {
 currTime := time.Now().Unix()
 length := uint(ListLen(queueName))
 if length < count {
  ListPush(queueName, currTime)
  return true
 }
 //隊列滿了,取出最早訪問的時間
 earlyTime, _ := strconv.ParseInt(ListIndex(queueName, int64(length)-1), 10, 64)
 //說明最早期的時間還在時間窗口內,還沒過期,所以不允許通過
 if currTime-earlyTime <= timeWindow {
  return false
 } else {
  //說明最早期的訪問應該過期了,去掉最早期的
  ListPop(queueName)
  ListPush(queueName, currTime)
 }
 return true
}

開源作品

開源GO語言在線WEB客服即時通訊管理系統GO-FLY

github地址:go-fly

在線測試地址:https://gofly.sopans.com

附錄:下面看下redis分布式鎖的go-redis實現

在分布式的業務中 , 如果有的共享資源需要安全的被訪問和處理 , 那就需要分布式鎖

分布式鎖的幾個原則;

1.「鎖的互斥性」:在分布式集群應用中,共享資源的鎖在同一時間只能被一個對象獲取。

2. 「可重入」:為了避免死鎖,這把鎖是可以重入的,并且可以設置超時。

3. 「高效的加鎖和解鎖」:能夠高效的加鎖和解鎖,獲取鎖和釋放鎖的性能也好。

4. 「阻塞、公平」:可以根據業務的需要,考慮是使用阻塞、還是非阻塞,公平還是非公平的鎖。

 

redis實現分布式鎖主要靠setnx命令

1. 當key存在時失敗 , 保證互斥性

2.設置了超時 , 避免死鎖

3.利用mutex保證當前程序不存在并發沖突問題

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package redis
 
import (
  "context"
  "github.com/go-redis/redis/v8"
  "github.com/taoshihan1991/miaosha/setting"
  "log"
  "sync"
  "time"
)
 
var rdb *redis.Client
var ctx = context.Background()
var mutex sync.Mutex
 
func NewRedis() {
  rdb = redis.NewClient(&redis.Options{
    Addr:   setting.Redis.Ip + ":" + setting.Redis.Port,
    Password: "", // no password set
    DB:    0, // use default DB
  })
}
func Lock(key string) bool {
  mutex.Lock()
  defer mutex.Unlock()
  bool, err := rdb.SetNX(ctx, key, 1, 10*time.Second).Result()
  if err != nil {
    log.Println(err.Error())
  }
  return bool
}
func UnLock(key string) int64 {
  nums, err := rdb.Del(ctx, key).Result()
  if err != nil {
    log.Println(err.Error())
    return 0
  }
  return nums
}

開源作品

開源GO語言在線WEB客服即時通訊管理系統GO-FLY

github地址:go-fly

在線測試地址:https://gofly.sopans.com

到此這篇關于go redis實現滑動窗口限流-redis版的文章就介紹到這了,更多相關go redis滑動窗口限流內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/taoshihan/archive/2020/12/14/14134840.html

延伸 · 閱讀

精彩推薦
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
主站蜘蛛池模板: 欧美成狂野欧美在线观看 | 性直播免费 | 韩国三级理韩国三级理人伦 | 日韩爱爱| 欧美香蕉人人人人人人爱 | 国产91一区二区在线播放不卡 | 亚洲成人aa | 99视频精品免费99在线 | 调教老师肉色丝袜的故事 | 人与动人物人a级特片 | 亚洲va久久久久 | 国产九九视频在线观看 | 羞羞答答影院在线 | 国产欧美日韩精品一区二 | 美女扒开屁股让男人进去 | 精品亚洲欧美中文字幕在线看 | 精品视频网站 | 99自拍视频在线观看 | 女烈受刑重口小说 | 国产精品 视频一区 二区三区 | 无限时间看片在线观看 | 国产高清在线播放免费观看 | 四神集团1涨奶是第几章 | 精品欧美一区二区三区四区 | 国产亚洲成归v人片在线观看 | 国产精品99在线观看 | 午夜尤物 | 韩国三级年轻小的胰子完整 | 貂蝉沦为姓奴小说 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 精品久久久久免费极品大片 | 特黄特色大片免费影院 | 99免费在线视频 | 色播影音先锋 | 久久永久免费视频 | 国产区一二三四区2021 | 性姿势女人嗷嗷叫图片 | 亚洲精品午夜久久aaa级久久久 | 色综合合久久天天综合绕视看 | 亚洲不卡视频 | 青青草原在线免费 |