婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > go redis實現(xiàn)滑動窗口限流的方式(redis版)

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

熱門標(biāo)簽:官渡電銷外呼管理系統(tǒng)怎么收費 利用地圖標(biāo)注位置 江蘇呼叫中心外呼系統(tǒng)有效果嗎 400開頭電話怎樣申請 地圖區(qū)域圖標(biāo)注后導(dǎo)出 杭州人工智能電銷機(jī)器人費用 赤峰電銷 貴州電話智能外呼系統(tǒng) 谷歌美發(fā)店地圖標(biāo)注

之前給大家介紹過單機(jī)當(dāng)前進(jìn)程的滑動窗口限流 , 這一個是使用go redis list結(jié)構(gòu)實現(xiàn)的滑動窗口限流 , 原理都一樣 , 但是支持分布式

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

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)
 //說明最早期的時間還在時間窗口內(nèi),還沒過期,所以不允許通過
 if currTime-earlyTime = timeWindow {
  return false
 } else {
  //說明最早期的訪問應(yīng)該過期了,去掉最早期的
  ListPop(queueName)
  ListPush(queueName, currTime)
 }
 return true
}

開源作品

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

github地址:go-fly

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

附錄:下面看下redis分布式鎖的go-redis實現(xiàn)

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

分布式鎖的幾個原則;

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

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

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

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

redis實現(xiàn)分布式鎖主要靠setnx命令

1. 當(dāng)key存在時失敗 , 保證互斥性

2.設(shè)置了超時 , 避免死鎖

3.利用mutex保證當(dāng)前程序不存在并發(fā)沖突問題

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客服即時通訊管理系統(tǒng)GO-FLY

github地址:go-fly

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

到此這篇關(guān)于go redis實現(xiàn)滑動窗口限流-redis版的文章就介紹到這了,更多相關(guān)go redis滑動窗口限流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 基于Redis+Lua腳本實現(xiàn)分布式限流組件封裝的方法
  • Python+redis通過限流保護(hù)高并發(fā)系統(tǒng)
  • Springboot使用redis進(jìn)行api防刷限流過程詳解
  • Redis和Lua實現(xiàn)分布式限流器的方法詳解
  • php使用lua+redis實現(xiàn)限流,計數(shù)器模式,令牌桶模式
  • 基于Redis的限流器的實現(xiàn)(示例講解)
  • 基于Redis實現(xiàn)分布式應(yīng)用限流的方法
  • redis限流的實際應(yīng)用

標(biāo)簽:鷹潭 宜春 武漢 河池 松原 黔西 泰安 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go redis實現(xiàn)滑動窗口限流的方式(redis版)》,本文關(guān)鍵詞  redis,實現(xiàn),滑動,窗口,限,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go redis實現(xiàn)滑動窗口限流的方式(redis版)》相關(guān)的同類信息!
  • 本頁收集關(guān)于go redis實現(xiàn)滑動窗口限流的方式(redis版)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 乌拉特前旗| 滨海县| 东平县| 永济市| 龙口市| 长治县| 秦安县| 万安县| 高平市| 广汉市| 甘孜县| 哈尔滨市| 微山县| 汕尾市| 诏安县| 夏津县| 法库县| 遂平县| 和顺县| 望奎县| 莱州市| 佛教| 汾西县| 河北省| 曲水县| 遂溪县| 万州区| 香港| 当阳市| 合肥市| 凤凰县| 梁山县| 梅州市| 疏附县| 鲜城| 台东市| 柳河县| 满城县| 榆树市| 宜良县| 宁明县|