新聞中心
Redis限流是利用Redis服務(wù)在一定時間內(nèi)限制客戶端訪問頻率的一種有效解決方案。它通過在Redis中存儲一些限流規(guī)則,使客戶端在訪問某個服務(wù)時,自動做出合理的限流處理,以達(dá)到保護(hù)服務(wù)質(zhì)量的作用。

Redis限流也經(jīng)常被用來應(yīng)對攻擊,通過限制過快的訪問請求,同時通過令牌柜/令牌桶算法等來實現(xiàn)準(zhǔn)入控制,可以有效避免攻擊者對服務(wù)的高頻攻擊。
然而在有些情況下,Redis限流依然會失去作用,而原因也很簡單明了:
1. 如果準(zhǔn)入控制策略有缺陷,攻擊可能會事半功倍,Redis限流可能看來像孩子一樣把門給推開了。
2. 如果Redis服務(wù)出現(xiàn)雪崩效應(yīng),將導(dǎo)致限流無效,客戶端得不到穩(wěn)定的限流服務(wù),很容易發(fā)生集中訪問和高頻攻擊。
因此,對于Redis限流,要想有效發(fā)揮它的作用,既要及時補充準(zhǔn)入控制策略,避免攻擊者高頻率攻擊;也要及時完善Redis數(shù)據(jù)庫的可用性,保證其較高的穩(wěn)定性,從而能夠給客戶端提供穩(wěn)定的服務(wù)質(zhì)量。
Redis限流是一種有效的服務(wù)限流能力,也是一種可以有效保護(hù)服務(wù)質(zhì)量的相對可靠的技術(shù)。 但是它在某些情況下,依然可能失去作用,主要原因在于準(zhǔn)入策略上的缺陷,以及Redis服務(wù)的可用性上的差異。 因此,要想有效的發(fā)揮Redis限流的作用,我們要及時補充準(zhǔn)入控制策略,及時完善Redis數(shù)據(jù)庫的可用性。
//Redis限流示例
local IP = KEYS[1]
local limitCount = tonumber(ARGV[1])
local currentTime = ARGV[2]
if redis.call('get',ip) then
--檢查是否超過限制
if tonumber(redis.call('get',ip)) >= limitCount then
return 0
else
--沒有超過限流
redis.call('INCRBY', ip, 1)
redis.call('EXPIRE',ip, currentTime+60)
return 1
end
else
--沒有這個IP就設(shè)置
redis.call("SET",ip,1)
redis.call('EXPIRE',ip, currentTime+60)
return 1
end
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機柜接入千兆交換機,能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
網(wǎng)站題目:Redis限流失去作用(redis限流無效)
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/djdddph.html


咨詢
建站咨詢
