Redis——漏斗限流

漏斗限流模塊——redis-cell

  1. 安裝: 同樣使用docker安裝
// 拉取鏡像
docker pull hsz1273327/redis-cell:latest
// 後臺運行,映射本地6381端口
docker run -d -p 6381:6379 hsz1273327/redis-cell
// 運行
redis-cli -p 6381

主要命令解析

CL.THROTTLE [key] [max_burst] [num] [second] [1]

  1. 傳參:
    • key: 漏斗的key
    • max_burst: 漏斗的容量
    • num: 速度
    • second: 秒

舉例: CL.THROTTLE test 100 30 60 1: 允許用戶的頻率爲每 60s 最多 30 次(漏水速率),漏斗的初始容量爲100,也就是說一開始可以連續回覆100個帖子,然後纔開始受漏水速率的影響。

  1. 返回參數
    • 是否成功,0:成功,1:拒絕
    • 令牌桶的容量,大小爲初始值+1
    • 剩餘空間
    • 若請求被拒絕,這個值表示多久秒後有空間,單位:秒,可以作爲重試時間
    • 表示多久後令牌桶中的令牌會爲空
func main()  {
	// 連接redis操作
	conn, err := redis.Dial("tcp","127.0.0.1:6381")
	HandlecError(err, "connect")
	defer func() {
		_ = conn.Close()
	}()

	for i := 1; i < 10 ; i++ {
		// 漏斗限流測試
		key := "redis-cell"
		res, _ := conn.Do("CL.THROTTLE", key, 15, 30, 60)
		fmt.Println(res)
		time.Sleep(time.Millisecond * 500)
	}
}


結果:
[0 16 15 -1 2]
[0 16 14 -1 3]
[0 16 13 -1 4]
[0 16 12 -1 6]
[0 16 12 -1 7]
[0 16 11 -1 9]
[0 16 10 -1 10]
[0 16 9 -1 12]
[0 16 9 -1 13]

應用場景

限制用戶行爲頻率

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章