校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > 詳解Redis實(shí)現(xiàn)限流的三種方式

詳解Redis實(shí)現(xiàn)限流的三種方式

熱門(mén)標(biāo)簽:宿遷便宜外呼系統(tǒng)平臺(tái) 鄭州人工智能電銷(xiāo)機(jī)器人系統(tǒng) 超呼電話機(jī)器人 山東外呼銷(xiāo)售系統(tǒng)招商 日本中國(guó)地圖標(biāo)注 魔獸2青云地圖標(biāo)注 貴州電銷(xiāo)卡外呼系統(tǒng) 北京400電話辦理收費(fèi)標(biāo)準(zhǔn) 十堰營(yíng)銷(xiāo)電銷(xiāo)機(jī)器人哪家便宜

 面對(duì)越來(lái)越多的高并發(fā)場(chǎng)景,限流顯示的尤為重要。

      當(dāng)然,限流有許多種實(shí)現(xiàn)的方式,Redis具有很強(qiáng)大的功能,我用Redis實(shí)踐了三種的實(shí)現(xiàn)方式,可以較為簡(jiǎn)單的實(shí)現(xiàn)其方式。Redis不僅僅是可以做限流,還可以做數(shù)據(jù)統(tǒng)計(jì),附近的人等功能,這些可能會(huì)后續(xù)寫(xiě)到。

第一種:基于Redis的setnx的操作

      我們?cè)谑褂肦edis的分布式鎖的時(shí)候,大家都知道是依靠了setnx的指令,在CAS(Compare and swap)的操作的時(shí)候,同時(shí)給指定的key設(shè)置了過(guò)期實(shí)踐(expire),我們?cè)谙蘖鞯闹饕康木褪菫榱嗽趩挝粫r(shí)間內(nèi),有且僅有N數(shù)量的請(qǐng)求能夠訪問(wèn)我的代碼程序。所以依靠setnx可以很輕松的做到這方面的功能。

     比如我們需要在10秒內(nèi)限定20個(gè)請(qǐng)求,那么我們?cè)趕etnx的時(shí)候可以設(shè)置過(guò)期時(shí)間10,當(dāng)請(qǐng)求的setnx數(shù)量達(dá)到20時(shí)候即達(dá)到了限流效果。代碼比較簡(jiǎn)單就不做展示了。

    具體的setnx用法可以參照我另一篇博客  RedisTemplate下Redis分布式鎖引發(fā)的系列問(wèn)題

   當(dāng)然這種做法的弊端是很多的,比如當(dāng)統(tǒng)計(jì)1-10秒的時(shí)候,無(wú)法統(tǒng)計(jì)2-11秒之內(nèi),如果需要統(tǒng)計(jì)N秒內(nèi)的M個(gè)請(qǐng)求,那么我們的Redis中需要保持N個(gè)key等等問(wèn)題

第二種:基于Redis的數(shù)據(jù)結(jié)構(gòu)zset

     其實(shí)限流涉及的最主要的就是滑動(dòng)窗口,上面也提到1-10怎么變成2-11。其實(shí)也就是起始值和末端值都各+1即可。

    而我們?nèi)绻肦edis的list數(shù)據(jù)結(jié)構(gòu)可以輕而易舉的實(shí)現(xiàn)該功能

    我們可以將請(qǐng)求打造成一個(gè)zset數(shù)組,當(dāng)每一次請(qǐng)求進(jìn)來(lái)的時(shí)候,value保持唯一,可以用UUID生成,而score可以用當(dāng)前時(shí)間戳表示,因?yàn)閟core我們可以用來(lái)計(jì)算當(dāng)前時(shí)間戳之內(nèi)有多少的請(qǐng)求數(shù)量。而zset數(shù)據(jù)結(jié)構(gòu)也提供了range方法讓我們可以很輕易的獲取到2個(gè)時(shí)間戳內(nèi)有多少請(qǐng)求

    代碼如下

public Response limitFlow(){
        Long currentTime = new Date().getTime();
        System.out.println(currentTime);
        if(redisTemplate.hasKey("limit")) {
            Integer count = redisTemplate.opsForZSet().rangeByScore("limit", currentTime -  intervalTime, currentTime).size();        // intervalTime是限流的時(shí)間 
            System.out.println(count);
            if (count != null  count > 5) {
                return Response.ok("每分鐘最多只能訪問(wèn)5次");
            }
        }
        redisTemplate.opsForZSet().add("limit",UUID.randomUUID().toString(),currentTime);
        return Response.ok("訪問(wèn)成功");
    }

   通過(guò)上述代碼可以做到滑動(dòng)窗口的效果,并且能保證每N秒內(nèi)至多M個(gè)請(qǐng)求,缺點(diǎn)就是zset的數(shù)據(jù)結(jié)構(gòu)會(huì)越來(lái)越大。實(shí)現(xiàn)方式相對(duì)也是比較簡(jiǎn)單的。

第三種:基于Redis的令牌桶算法

    提到限流就不得不提到令牌桶算法了。具體可以參照度娘的解釋  令牌桶算法

    令牌桶算法提及到輸入速率和輸出速率,當(dāng)輸出速率大于輸入速率,那么就是超出流量限制了。

    也就是說(shuō)我們每訪問(wèn)一次請(qǐng)求的時(shí)候,可以從Redis中獲取一個(gè)令牌,如果拿到令牌了,那就說(shuō)明沒(méi)超出限制,而如果拿不到,則結(jié)果相反。

    依靠上述的思想,我們可以結(jié)合Redis的List數(shù)據(jù)結(jié)構(gòu)很輕易的做到這樣的代碼,只是簡(jiǎn)單實(shí)現(xiàn)

    依靠List的leftPop來(lái)獲取令牌

// 輸出令牌
public Response limitFlow2(Long id){
        Object result = redisTemplate.opsForList().leftPop("limit_list");
        if(result == null){
            return Response.ok("當(dāng)前令牌桶中無(wú)令牌");
        }
        return Response.ok(articleDescription2);
    }

   再依靠Java的定時(shí)任務(wù),定時(shí)往List中rightPush令牌,當(dāng)然令牌也需要唯一性,所以我這里還是用UUID進(jìn)行了生成

// 10S的速率往令牌桶中添加UUID,只為保證唯一性
    @Scheduled(fixedDelay = 10_000,initialDelay = 0)
    public void setIntervalTimeTask(){
        redisTemplate.opsForList().rightPush("limit_list",UUID.randomUUID().toString());
    }

    綜上,代碼實(shí)現(xiàn)起始都不是很難,針對(duì)這些限流方式我們可以在AOP或者filter中加入以上代碼,用來(lái)做到接口的限流,最終保護(hù)你的網(wǎng)站。

    Redis其實(shí)還有很多其他的用處,他的作用不僅僅是緩存,分布式鎖的作用。他的數(shù)據(jù)結(jié)構(gòu)也不僅僅是只有String,Hash,List,Set,Zset。有興趣的可以后續(xù)了解下他的GeoHash算法;BitMap,HLL以及布隆過(guò)濾器數(shù)據(jù)(Redis4.0之后加入,可以用Docker直接安裝redislabs/rebloom)結(jié)構(gòu)。目前我也已經(jīng)把這些Redis的其他作用都用在了我自己的博客網(wǎng)站(前端技術(shù)較渣,沒(méi)時(shí)間研究怎么把文章爬蟲(chóng)下來(lái)用MarkDown展示,有會(huì)的大佬可以指教下)。

到此這篇關(guān)于詳解Redis實(shí)現(xiàn)限流的三種方式的文章就介紹到這了,更多相關(guān)Redis 限流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 基于Redis的限流器的實(shí)現(xiàn)(示例講解)
  • 基于Redis實(shí)現(xiàn)分布式應(yīng)用限流的方法
  • redis限流的實(shí)際應(yīng)用
  • redis redisson 限流器的實(shí)例(RRateLimiter)

標(biāo)簽:楊凌 果洛 北京 吉安 大慶 江蘇 朝陽(yáng) 臺(tái)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Redis實(shí)現(xiàn)限流的三種方式》,本文關(guān)鍵詞  詳解,Redis,實(shí)現(xiàn),限,流的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Redis實(shí)現(xiàn)限流的三種方式》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于詳解Redis實(shí)現(xiàn)限流的三種方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    69成人精品免费视频| 99久久精品国产毛片| 日韩午夜在线观看视频| 免费日本视频一区| 日韩午夜av一区| 美女在线一区二区| 久久久久国产精品麻豆ai换脸| 精油按摩中文字幕久久| 国产亚洲制服色| 91亚洲国产成人精品一区二三| 国产色一区二区| 91丨porny丨户外露出| 一区av在线播放| 91精品国产综合久久婷婷香蕉| 蜜臀精品一区二区三区在线观看 | 国产亚洲欧美日韩俺去了| 国产精品亚洲а∨天堂免在线| 中国色在线观看另类| 色老汉av一区二区三区| 毛片不卡一区二区| 国产区在线观看成人精品| 一本在线高清不卡dvd| 蜜臀av国产精品久久久久| 久久久久久电影| 色先锋资源久久综合| 美女诱惑一区二区| 中文字幕五月欧美| 69p69国产精品| 成人晚上爱看视频| 婷婷久久综合九色国产成人| 久久久一区二区三区捆绑**| 91丨porny丨最新| 男男视频亚洲欧美| 国产精品国产精品国产专区不片| 欧美日本国产一区| 国产成人精品一区二| 亚洲国产sm捆绑调教视频| 久久女同互慰一区二区三区| 色就色 综合激情| 国产精品一区二区果冻传媒| 亚洲国产另类精品专区| 欧美激情一区在线| 欧美一级黄色录像| 欧美伊人久久大香线蕉综合69| 国产精品综合在线视频| 午夜欧美电影在线观看| 中文字幕一区二区5566日韩| 欧美电影免费观看完整版| 欧美一a一片一级一片| 风间由美中文字幕在线看视频国产欧美| 亚洲国产精品久久久久秋霞影院| 中文字幕久久午夜不卡| 日韩视频在线永久播放| 欧美日韩日日摸| 成人av片在线观看| 国产在线精品不卡| 美女脱光内衣内裤视频久久网站| 亚洲精品视频在线看| 国产欧美日本一区二区三区| 欧美成人一区二区三区| 欧美日本乱大交xxxxx| 91黄色小视频| 91美女片黄在线| 国产成人午夜电影网| 国产一区二区免费在线| 奇米888四色在线精品| 亚洲第一福利视频在线| 一区二区日韩电影| 亚洲黄色av一区| 亚洲日本在线a| 中文字幕一区二区三区在线不卡| 国产日韩欧美亚洲| 日本一区二区免费在线 | 99久久精品一区| 成人一区二区三区视频在线观看| 9i看片成人免费高清| 国产福利一区在线| 国产在线播放一区| 国产在线国偷精品免费看| 精一区二区三区| 久久99九九99精品| 精品一区二区在线观看| 激情欧美一区二区三区在线观看| 免费不卡在线视频| 久久99久久久久久久久久久| 久久精品国产精品亚洲精品| 韩国视频一区二区| 国产精品白丝av| 成人激情av网| 色欲综合视频天天天| 欧美在线视频你懂得| 在线观看视频欧美| 欧美一区在线视频| 欧美精品一区二区三区在线 | 亚洲免费观看高清在线观看| 亚洲黄色片在线观看| 天涯成人国产亚洲精品一区av| 天堂一区二区在线| 精品在线亚洲视频| 国产91对白在线观看九色| 成人午夜又粗又硬又大| 色先锋资源久久综合| 欧美一区二区精品在线| 久久亚洲一级片| 亚洲三级电影全部在线观看高清| 亚洲午夜私人影院| 免费精品99久久国产综合精品| 国产电影一区二区三区| 91原创在线视频| 91精品国产综合久久精品| 久久精品一区二区| 一卡二卡欧美日韩| 久草热8精品视频在线观看| 成人午夜精品一区二区三区| 色综合中文字幕国产| 欧美视频一区二区三区四区| 欧美不卡一二三| 亚洲欧美激情在线| 韩国精品在线观看| 在线观看日韩高清av| 精品盗摄一区二区三区| 亚洲美女屁股眼交3| 蜜桃av一区二区三区电影| 99re热视频精品| 欧美成人精品福利| 亚洲乱码国产乱码精品精可以看| 男女男精品网站| 色偷偷一区二区三区| 精品久久久久久久久久久久久久久| 中文字幕中文乱码欧美一区二区| 日韩精品成人一区二区在线| 成人免费视频视频| 6080亚洲精品一区二区| 中文无字幕一区二区三区| 日日嗨av一区二区三区四区| 成人综合婷婷国产精品久久蜜臀 | eeuss鲁片一区二区三区| 欧美一区二区网站| 最新国产精品久久精品| 国产一区三区三区| 欧美区在线观看| 亚洲精品免费一二三区| 91在线精品秘密一区二区| 日韩精品一区国产麻豆| 亚洲福利一二三区| 97久久精品人人爽人人爽蜜臀| 欧美精品一区二区三区在线| 亚洲bt欧美bt精品| 在线免费亚洲电影| 亚洲欧美在线另类| 国产精品99久久久久久宅男| 欧美不卡在线视频| 日韩国产精品91| 欧美三级一区二区| 亚洲欧美日韩一区二区| 韩日av一区二区| 91精品国产黑色紧身裤美女| 亚洲精品中文字幕在线观看| 成人av网在线| 中文字幕欧美区| 成人美女视频在线观看| 国产日韩精品一区二区三区| 韩国一区二区三区| 亚洲精品一区二区在线观看| 免费成人av资源网| 欧美成人r级一区二区三区| 日韩电影免费一区| 欧美精品日韩一区| 日韩av电影天堂| 欧美性xxxxxxxx| 久久久久久久久久久99999| 黄色日韩网站视频| 久久奇米777| 成人网男人的天堂| 中文字幕一区二区不卡| 色综合久久中文综合久久牛| 自拍av一区二区三区| 99久久久久久| 夜夜精品视频一区二区| 欧美视频日韩视频在线观看| 樱花影视一区二区| 欧美日韩国产综合草草| 日本亚洲视频在线| 精品国产免费久久| 粉嫩久久99精品久久久久久夜| 中文文精品字幕一区二区| 91视频.com| 亚欧色一区w666天堂| 日韩午夜激情视频| 成人做爰69片免费看网站| 亚洲欧美国产三级| 欧美男生操女生| 久久激情五月婷婷| 国产精品视频你懂的| 在线这里只有精品| 亚洲aⅴ怡春院| 国产午夜一区二区三区| 色综合久久88色综合天天免费| 天使萌一区二区三区免费观看| 精品国产乱码久久久久久图片|