漏斗限流模塊——redis-cell
- 安裝: 同樣使用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]
- 傳參:
- key: 漏斗的key
- max_burst: 漏斗的容量
- num: 速度
- second: 秒
舉例: CL.THROTTLE test 100 30 60 1: 允許用戶的頻率爲每 60s 最多 30 次(漏水速率),漏斗的初始容量爲100,也就是說一開始可以連續回覆100個帖子,然後纔開始受漏水速率的影響。
- 返回參數
- 是否成功,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]
應用場景
限制用戶行爲頻率