redis實現令牌桶演算法思路

2021-10-24 03:45:51 字數 1306 閱讀 3516

1.常用的限流思路令牌桶演算法和漏桶演算法

直接令牌桶演算法**

<?php

class

tokenbucket

public

function

__construct

($config

,$queue

,$max

)/**

*獲取令牌

*/public

function

get(

)/**

* 新增令牌

* @param int $num

* @return int

*/public

function

add(

$num=0

)return0;

}/**

* 重新設定了令牌桶,填滿令牌

*/public

function

reset()

}// redis連線設定

$config

=array

('host'

=>

'localhost'

,'port'

=>

6379

,'index'

=>0,

'auth'

=>'',

'timeout'

=>1,

'reserved'

=>

null

,'retry_interval'

=>

100,);

$queue

="mycontainer"

;$max=5

;$tokenbucket

=new

tokenbucket

($config

,$queue

,$max);

$tokenbucket

->

reset()

;// 迴圈獲取令牌,令牌桶內只有5個令牌,因此最後3次獲取失敗

for($i=

0;$i<8;

$i++

)// 加入10個令牌,最大令牌為5,因此只能加入5個

$add_num

=$tokenbucket

->

add(10)

;var_dump

($add_num);

// 迴圈獲取令牌,令牌桶內只有5個令牌,因此最後1次獲取失敗

for($i=

0;$i<6;

$i++

)

秒殺 redis令牌桶

秒殺 大量請求搶奪少量資源的時候。如果直接使用資料庫的樂觀鎖或者悲觀鎖來實現,資料庫壓力很大,處理效率也很低下。這裡有乙個比較好的思路就是利用redis令牌桶的方法實現。首先了解乙個redis的幾個命令 redis.rpush key,value 向佇列右側新增元素 redis.lpop key 從...

redis令牌桶限流

每個ip 1秒內只能傳送一次請求 pom檔案 org.springframework.bootgroupid spring boot starter data redis reactiveartifactid 2.1.3.releaseversion dependency 啟動引導類定義 keyre...

Redis令牌桶限流

在開發介面伺服器的過程中,為了防止客戶端對於介面的濫用,保護伺服器的資源,通常來說我們會對於伺服器上的各種介面進行呼叫次數的限制。比如對於某個 使用者,他在乙個時間段 interval 內,比如 1 分鐘,呼叫伺服器介面的次數不能夠 大於乙個上限 limit 比如說 100 次。如果使用者呼叫介面的...