国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式限流:Redis

這篇具有很好參考價值的文章主要介紹了分布式限流:Redis。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1:如何實現(xiàn)分布式限流

2:限流的幾種類別?

2.1:固定窗口限流

2.2:滑動窗口限流

2.3:漏桶限流

2.4:令牌桶限流

3:實現(xiàn)分布式限流:Redis

3.1:引入Redisson的依賴包

3.2:初始化Redisson

3.3:創(chuàng)建Redisson的限流類?


1:如何實現(xiàn)分布式限流

1:把統(tǒng)計用戶的使用頻率等這些數(shù)據(jù)放到一個集中的存儲,比如redis,這樣無論用戶的請求落在了哪臺服務器,都以集中存儲的數(shù)據(jù)為準。(Redis)

2:限流的幾種類別?

2.1:固定窗口限流

單位時間內(nèi),允許部分操作。 1小時,只允許10個用戶操作。

優(yōu)點:最簡單

缺點:可能出現(xiàn)流量突刺

eg:前59分鐘,第59分鐘來了十個操作。第一小時01分鐘又來了十個操作,就可能導致流量突刺,相當于2分鐘實現(xiàn)了20個操作。

2.2:滑動窗口限流

單位時間內(nèi),允許部分操作,但是這個時間是滑動的? 需要指定滑動單位

滑動單位: 1min

開始前:

0s? 1h 2h

一分鐘:

1min 1h1min

優(yōu)點;能夠解決上面流量突刺的問題,第59分鐘,限流窗口59min到1h59min,這個時間段內(nèi)接受10次請求,只要在這個窗口內(nèi),更多的操作就會被拒絕。

缺點:實現(xiàn)相對復雜。滑動單位越小,限效果越好。

2.3:漏桶限流

以固定的速率請求,當請求桶滿后,拒絕請求。

每秒處理10個請求,桶的容量是10,每0.1秒處理1次請求(固定的),如果1秒內(nèi),來了10個都可以處理完,但如果一秒內(nèi)來了11個請求,最后那個請求就會被拒絕。

優(yōu)點:能夠一定程度上應對流量突刺,能夠以固定的速率處理請求,安全性高

缺點:速度是固定的,沒有辦法處理一批請求,只能一個一個來

2.4:令牌桶限流

管理員先生成一批令牌,每秒生成10個令牌,當用戶操作前,先去拿到令牌,有令牌的人可以先執(zhí)行,都能夠同時執(zhí)行。

優(yōu)點:能夠并發(fā)處理同時的請求,并發(fā)性高

缺點:時間單位選取的問題。

?以上漏桶限流和令牌桶限流最常用。

3:實現(xiàn)分布式限流:Redis

分布式限流:Redis,redis,1024程序員節(jié),spring boot,分布式,redis

3.1:引入Redisson的依賴包

  <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.17.5</version>
   </dependency>

3.2:初始化Redisson

@Configuration
@ConfigurationProperties(prefix = "spring.redis")

public class RedissonConfig {
    private Integer database;
    private String host;
    private String port;
    @Bean
    public RedissonClient getRedissonClient(){
        //配置Redis的配置類
        Config config=new Config();
        config.useSingleServer()
                .setDatabase(database)
                .setAddress("redis://"+host+":"+port);
        RedissonClient redisson= Redisson.create(config);
        return redisson;

    }
}

分布式限流:Redis,redis,1024程序員節(jié),spring boot,分布式,redis?

3.3:創(chuàng)建Redisson的限流類?

@Service
public class RedisLimiterManage {
    @Autowired
    private RedissonClient redissonClient;
    //key:區(qū)分不同的限流器:不同的用戶id
    public void doRateLimit(String key){

        RRateLimiter rateLimiter=redissonClient.getRateLimiter(key);
        //將所有用戶的訪問次數(shù)放在同一個限流器上,1秒允許兩次
        rateLimiter.trySetRate(RateType.OVERALL,2,1, RateIntervalUnit.SECONDS);
        //每當一個用戶來了之后,請求一個令牌
        boolean result = rateLimiter.tryAcquire(1);
        if(!result){
            throw new BusinessException(ErrorCode.NO_AUTH_ERROR,"請求過于頻繁");
        }
    }
}

分布式限流:Redis,redis,1024程序員節(jié),spring boot,分布式,redis

當我們使用分布式限流Redis的時候,只需要讓這個RedisLimiterManage調(diào)用doRateLimit方法,就可以進行分布式限流的操作。

 @Autowired
 private RedisLimiterManage redisLimiterManage;
//引入依賴

 //進行限流判斷
        redisLimiterManage.doRateLimit("genChartByAi_"+user.getId());
 //每個用戶的限流器

?文章來源地址http://www.zghlxwxcb.cn/news/detail-720497.html

到了這里,關于分布式限流:Redis的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 使用 redis 實現(xiàn)分布式接口限流注解 RedisLimit

    使用 redis 實現(xiàn)分布式接口限流注解 RedisLimit

    前言 很多時候,由于種種不可描述的原因,我們需要針對單個接口實現(xiàn)接口限流,防止訪問次數(shù)過于頻繁。這里就用 redis+aop 實現(xiàn)一個限流接口注解 @RedisLimit 代碼 點擊查看RedisLimit注解代碼 AOP代碼 點擊查看aop代碼 lua腳本代碼 注意:腳本代碼是放在 resources 文件下的,它的類型是

    2024年02月08日
    瀏覽(25)
  • 【redis】redis分布式鎖

    一、為什么需要分布式鎖 1.在java單機服務中,jvm內(nèi)部有一個全局的鎖監(jiān)視器,只有一個線程能獲取到鎖,可以實現(xiàn)線程之間的互斥 2.當有多個java服務時,會有多個jvm,也會有多個鎖監(jiān)視器,這樣沒辦法使得多個jvm之間的線程互斥,所以無法使用jvm內(nèi)部的鎖監(jiān)視器,也就是s

    2023年04月25日
    瀏覽(28)
  • Redis與分布式-分布式鎖

    Redis與分布式-分布式鎖

    接上文 Redis與分布式-集群搭建 為了解決上述問題,可以利用分布式鎖來實現(xiàn)。 重新復制一份redis,配置文件都是剛下載時候的不用更改,然后啟動redis服務和redis客戶。 redis存在這樣的命令:和set命令差不多,但是它有一個機制,當指定的key不存在的時候,才能進行插入,實

    2024年02月07日
    瀏覽(27)
  • Redis分布式鎖和分布式事務

    Redis分布式鎖和分布式事務 一、Redis分布式鎖 1.1 watch和事務實現(xiàn)分布式鎖 原理是通過watch來觀察一個變量,一個線程在操作的時候,其他線程會操作失敗,相當于樂觀鎖。 1.2 setnx實現(xiàn)分布式鎖 原理是通過setnx設置一個變量,設置成功的線程搶到鎖,執(zhí)行相關的業(yè)務,執(zhí)行完畢

    2024年02月09日
    瀏覽(25)
  • 【redis】redis分布式鎖(三)自動續(xù)期

    【redis】redis分布式鎖(三)自動續(xù)期

    【redis】redis分布式鎖(一)手寫分布式鎖1.0~6.0 【redis】redis分布式鎖(二)可重入鎖+設計模式 在主節(jié)點set的值,但是在復制給從機過程中宕機了,這時候從機上位是不能獲取這個值的 CP: 故障:犧牲了高可用,即在一臺master宕機后,選舉新master時,zk服務不可用 AP: 在鎖的

    2024年02月02日
    瀏覽(25)
  • 【Redis】Redis分布式鎖的10個坑

    【Redis】Redis分布式鎖的10個坑

    日常開發(fā)中,經(jīng)常會碰到秒殺搶購等業(yè)務。為了避免并發(fā)請求造成的庫存超賣等問題,我們一般會用到Redis分布式鎖。但是使用Redis分布式鎖,很容易踩坑哦~ 本文將給大家分析闡述,Redis分布式鎖的10個坑~ 一說到實現(xiàn)Redis的分布式鎖,很多小伙伴馬上就會想到setnx+ expire命令。

    2024年02月05日
    瀏覽(26)
  • Redis 分布式緩存

    Redis 分布式緩存

    單點 Redis 的問題及解決 數(shù)據(jù)丟失:實現(xiàn)Redis數(shù)據(jù)持久化 并發(fā)能力:搭建主從集群,實現(xiàn)讀寫分離 存儲能力:搭建分片集群,利用插槽機制實現(xiàn)動態(tài)擴容 故障恢復能力:利用哨兵機制,實現(xiàn)健康檢測和自動恢復 RDB RDB全稱Redis Database Backup file (Redis數(shù)據(jù)備份文件),也被叫做

    2024年02月10日
    瀏覽(24)
  • Redis分布式緩存

    Redis分布式緩存

    -- 基于Redis集群解決單機Redis存在的問題 單機的Redis存在四大問題: Redis有兩種持久化方案: RDB持久化 AOF持久化 ? ? ? ?RDB全稱Redis Database Backup file(Redis數(shù)據(jù)備份文件),也被叫做 Redis數(shù)據(jù)快照 。簡單來說就是把 內(nèi)存中的所有數(shù)據(jù)都記錄到磁盤 中。當Redis實例故障重啟后,

    2024年02月12日
    瀏覽(19)
  • Redis+分布式+秒殺

    Redis+分布式+秒殺

    關于mysql關系型數(shù)據(jù)庫的一些分析: 1、從性能上:如果查詢結果不是很頻繁變動的SQL語句,我們就沒有必要每次都去查詢數(shù)據(jù)庫,可以把這種數(shù)據(jù)放在基于緩存的數(shù)據(jù)庫中,這樣不僅提升了查詢效率還分擔了數(shù)據(jù)庫壓力。 2、從并發(fā)上:在大并發(fā)的情況下(比如618秒殺活動,

    2024年02月06日
    瀏覽(19)
  • redis與分布式

    redis與分布式

    主從復制,是指將一臺Redis服務器的數(shù)據(jù),復制到其他的Redis服務器。前者稱為主節(jié)點(Master),后者稱為從節(jié)點(Slave),數(shù)據(jù)的復制是單向的,只能由主節(jié)點到從節(jié)點。Master以寫為主,Slave 以讀為主(只讀模式),當主節(jié)點關閉后,從節(jié)點依然可以讀取數(shù)據(jù),但是會報錯 優(yōu)點 :

    2024年02月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包