最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go redis實(shí)現(xiàn)滑動(dòng)窗口限流的方式(redis版)

 更新時(shí)間:2020年12月15日 10:17:44   作者:陶士涵  
這篇文章主要介紹了go redis實(shí)現(xiàn)滑動(dòng)窗口限流的方式(redis版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

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

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
 }
 //隊(duì)列滿了,取出最早訪問的時(shí)間
 earlyTime, _ := strconv.ParseInt(ListIndex(queueName, int64(length)-1), 10, 64)
 //說明最早期的時(shí)間還在時(shí)間窗口內(nèi),還沒過期,所以不允許通過
 if currTime-earlyTime <= timeWindow {
  return false
 } else {
  //說明最早期的訪問應(yīng)該過期了,去掉最早期的
  ListPop(queueName)
  ListPush(queueName, currTime)
 }
 return true
}

開源作品

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

github地址:go-fly

在線測(cè)試地址:https://gofly.sopans.com

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

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

分布式鎖的幾個(gè)原則;

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

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

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

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

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

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

2.設(shè)置了超時(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客服即時(shí)通訊管理系統(tǒng)GO-FLY

github地址:go-fly

在線測(cè)試地址:https://gofly.sopans.com

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

相關(guān)文章

  • Go語言中的復(fù)合類型詳細(xì)介紹

    Go語言中的復(fù)合類型詳細(xì)介紹

    這篇文章主要介紹了Go語言中的復(fù)合類型詳細(xì)介紹,復(fù)合類型包括:結(jié)構(gòu)體、數(shù)組、切片、Maps,需要的朋友可以參考下
    2014-10-10
  • golang?db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn)

    golang?db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn)

    這篇文章主要介紹了golang db事務(wù)的統(tǒng)一封裝的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 從并發(fā)到并行解析Go語言中的sync.WaitGroup

    從并發(fā)到并行解析Go語言中的sync.WaitGroup

    Go?語言提供了許多工具和機(jī)制來實(shí)現(xiàn)并發(fā)編程,其中之一就是?sync.WaitGroup。本文就來深入討論?sync.WaitGroup,探索其工作原理和在實(shí)際應(yīng)用中的使用方法吧
    2023-05-05
  • Go內(nèi)存分配之結(jié)構(gòu)體優(yōu)化技巧

    Go內(nèi)存分配之結(jié)構(gòu)體優(yōu)化技巧

    這篇文章主要為大家詳細(xì)介紹了Go語言內(nèi)存分配之結(jié)構(gòu)體優(yōu)化技巧的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • golang等待觸發(fā)事件的實(shí)例

    golang等待觸發(fā)事件的實(shí)例

    這篇文章主要介紹了golang等待觸發(fā)事件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • go語言標(biāo)準(zhǔn)庫fmt包的一鍵入門

    go語言標(biāo)準(zhǔn)庫fmt包的一鍵入門

    這篇文章主要為大家介紹了go語言標(biāo)準(zhǔn)庫fmt包的一鍵入門使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過程詳解

    Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過程詳解

    這篇文章主要為大家介紹了Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Golang定時(shí)器Timer與Ticker的使用詳解

    Golang定時(shí)器Timer與Ticker的使用詳解

    在 Go 里有很多種定時(shí)器的使用方法,像常規(guī)的 Timer、Ticker 對(duì)象,本文主要為大家介紹了Timer與Ticker的使用,感興趣的小伙伴可以了解一下
    2023-05-05
  • Go語言context?test源碼分析詳情

    Go語言context?test源碼分析詳情

    這篇文章主要介紹了Go語言context?test源碼分析詳情,關(guān)于context?test,測(cè)試對(duì)象是context包,測(cè)試包的包名是context_test,下面將對(duì)context?test源碼進(jìn)行分析,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2022-02-02
  • Golang搭建grpc環(huán)境的流程步驟

    Golang搭建grpc環(huán)境的流程步驟

    這篇文章主要給大家介紹了Golang搭建grpc環(huán)境的流程步驟,文中通過圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家了解Golang搭建grpc環(huán)境有一定的幫助,需要的朋友可以參考下
    2024-03-03

最新評(píng)論

历史| 凤庆县| 元氏县| 永城市| 陕西省| 株洲市| 裕民县| 堆龙德庆县| 皮山县| 罗定市| 徐汇区| 青岛市| 波密县| 盖州市| 北安市| 兴宁市| 张家口市| 舞钢市| 宁远县| 年辖:市辖区| 安福县| 织金县| 孝义市| 长武县| 兴山县| 得荣县| 龙门县| 永登县| 沂水县| 那曲县| 永德县| 潍坊市| 崇州市| 金沙县| 沐川县| 泗水县| 沛县| 叶城县| 岚皋县| 武鸣县| 土默特左旗|