最贊回答 / itbsl
代碼層面做限流的話,可以用redis來(lái)配合做,假設(shè)你的一個(gè)接口的請(qǐng)求限制的一個(gè)IP1s內(nèi)只能有一個(gè)請(qǐng)求,則可以將接口名+IP作為鍵存一個(gè)bool值true,并且設(shè)置生命周期為1s,每次處理請(qǐng)求時(shí)先從redis里根據(jù)“接口名+IP”拿值,如果該值為true,說(shuō)明一秒內(nèi)已經(jīng)有過(guò)一次請(qǐng)求,這種就可以直接拒絕不繼續(xù)往下處理,相反如果拿不到值了,說(shuō)明之前沒(méi)有請(qǐng)求過(guò)或者請(qǐng)求的時(shí)間已經(jīng)是1s之前了,這種就允許通過(guò),繼續(xù)處理下面的業(yè)務(wù)。
2019-11-29
講師回答 / 皮奇
這個(gè)其實(shí)是個(gè)高空用的問(wèn)題,屬于運(yùn)維層面要解決的事情,一般redis不是直連,而是通過(guò)vip連接到proxy,proxy再根究切片配置轉(zhuǎn)發(fā)到redis實(shí)例,每個(gè)redis實(shí)例是一主多從,讀寫都在主,主掛了之后會(huì)自動(dòng)通過(guò)raft算法選舉出一個(gè)新的主,用于確保服務(wù)的高可用。市面上有比較成熟的解決方案,如codis,可以了解下。
2019-10-26
講師回答 / 皮奇
同學(xué)你好,你的思路不錯(cuò),可以繼續(xù)去想下直接incrby改會(huì)有什么問(wèn)題,老師提供的思路只是其中一個(gè)方案,真正場(chǎng)景實(shí)現(xiàn)肯定會(huì)有非常多的方案,需要大家自己思考。redis->eval本身就是執(zhí)行l(wèi)ua腳本,redis->incrby理論上也可以防止邊界條件的發(fā)生,不會(huì)造成超賣,因?yàn)閕ncrby就實(shí)現(xiàn)了查詢+修改的原子操作,但是有一點(diǎn)點(diǎn)小缺點(diǎn)就是,不能做到只要一超賣了就直接終止+1。
2019-10-01
講師回答 / 皮奇
不過(guò)代碼在這,https://github.com/huangtao1990/seckill?只是示例代碼,不能直接用于生產(chǎn)環(huán)境。
2019-09-09
已采納回答 / 皮奇
同學(xué)你好,用的processon
講師回答 / 皮奇
同學(xué)你好,具體哪聽不懂可以反饋給我,我后續(xù)慢慢優(yōu)化。lua一門腳本語(yǔ)言,是一門短小精悍的語(yǔ)言,代碼量非常少,可以嵌入到任何一門C開發(fā)的工具中,因此在nginx、redis中都有應(yīng)用,可以快速的擴(kuò)展nginx與redis這兩個(gè)工具的功能。
2019-09-04