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

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包)

這篇具有很好參考價值的文章主要介紹了【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

????個人主頁:哈__

期待您的關(guān)注?

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

本文介紹SpringBoot整合Redis并且進行接口的限流,文章主要介紹的是一種思想,具體代碼還要結(jié)合實際。

一、Windows安裝Redis

Redis的解壓包我放在了百度網(wǎng)盤上,有需要的可以下載。

Redis-x64-3.0.504 解壓碼:uhwj

二、啟動Redis

我們在本地解壓下載的Redis壓縮包,打開解壓后的目錄,首先啟動redis-server.exe,之后在啟動redis-cli.exe。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

啟動成功截圖如下。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

三、SpringBoot整合Redis?

1.引入依賴?

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

2.添加配置文件application.yml

?我們并沒有設(shè)置密碼所以不用配置。

spring: 
  redis:
    host: 127.0.0.1
    port: 6379

3.創(chuàng)建RedisController

我們現(xiàn)在是介紹思想,所以傳入了一個用戶的id來判斷是哪一個用戶訪問的接口。我們對redis中保存的key為用戶id的鍵值對進行一個自增操作,然后返回這個自增后的值,這個值代表的就是我們在十秒鐘內(nèi)訪問接口的次數(shù)。每次訪問我們都重新設(shè)置這個鍵值對的有效時間,如果值大于5說明我們訪問的次數(shù)已經(jīng)達到了系統(tǒng)對個人十秒鐘內(nèi)訪問次數(shù)的限制了,就不可以執(zhí)行我們的業(yè)務(wù)邏輯。

@Resource
private RedisTemplate<String, String> redisTemplate;

@GetMapping("/test2")
    public String test2(String id){
        Long increment = redisTemplate.opsForValue().increment(id);
        redisTemplate.expire(id,10,TimeUnit.SECONDS);
        if(increment > 5){
            return "不可以訪問,訪問次數(shù)為"+increment;
        }
        return "可以訪問,訪問次數(shù)為"+increment;
    }

之后啟動我們的SpringBoot項目。我這里使用的是PostMan進行的接口測試。

進行第一次訪問。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

第二次。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis?

第五次 。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

第六次。第六次可以看到接口的返回值為不可以訪問,說明我們的訪問次數(shù)已經(jīng)上限了,這時候就要等十秒后再次訪問了。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis?

四、Redis限流的幾種方法?

1.基于Redis的數(shù)據(jù)結(jié)構(gòu)zset(滑動窗口)

思想比較容易接收,我們定一個這樣一個key為limit的列表,每當(dāng)我們發(fā)送一次請求的時候,我們向這個列表當(dāng)中添加當(dāng)前的時間戳(前提是沒有被限流),當(dāng)然,在我們進行數(shù)據(jù)的添加之前需要進行是否需要進行限流。我們設(shè)定intervalTime為限流的時間間隔,我們從limit列表中獲取我們訪問接口的時間currentTIme-intervalTime,這樣我們判斷一下(currentTIme-intervalTime,currentTime)范圍內(nèi)的時間戳個數(shù),也就是我們請求的次數(shù),這樣就能判斷是否超過限制了。這里我用一張圖來表示。

既然叫做滑動窗口,那這個窗口的大小就是我們進行限流的時間間隔,這個窗口在我們的時間軸上進行移動。

【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包),spring boot,spring,redis

代碼如下:

@GetMapping("/test3")
    public String test3(){
        int intervalTime = 10;
        Long currentTime = new Date().getTime();
        if(Boolean.TRUE.equals(redisTemplate.hasKey("limit"))) {
            Integer count = Objects.requireNonNull(redisTemplate.opsForZSet().rangeByScore("limit", currentTime - intervalTime, currentTime)).size();
            if (count != null && count > 5) {
                return "每分鐘最多只能訪問5次";
            }
        }
        redisTemplate.opsForZSet().add("limit", UUID.randomUUID().toString(),currentTime);
        return "訪問成功";
    }

?2.基于Redis的令牌桶算法

這個就好理解了,一個筐子里十個蘋果大家都去拿,拿到了就可以吃,拿不到就等著別人放。在Redis里我們在一個列表里放令牌,用戶訪問接口去嘗試拿這個令牌,拿到了就能訪問接口,拿不到就進行限流,當(dāng)然除了拿令牌之外還放令牌,我們通過定時任務(wù)向列表內(nèi)放令牌。

 @GetMapping("/test3")
    public String test3(){
        Object result = redisTemplate.opsForList().leftPop("limit_list");
        if(result == null){
            return "當(dāng)前令牌桶中無令牌,無法訪問";
        }
        return "訪問成功";
    }
    @Scheduled(fixedDelay = 100,initialDelay = 0)
    public void setLimitListTask(){
        redisTemplate.opsForList().rightPush("limit_list",UUID.randomUUID().toString());
    }

定時任務(wù)到底如何使用,大家可以自行搜索一下。還有一些其他的方式本文就不在介紹了。文章來源地址http://www.zghlxwxcb.cn/news/detail-845762.html

到了這里,關(guān)于【Spring】SpringBoot整合Redis,用Redis實現(xiàn)限流(附Redis解壓包)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 微服務(wù) Spring Boot 整合Redis 實現(xiàn)優(yōu)惠卷秒殺 一人一單

    微服務(wù) Spring Boot 整合Redis 實現(xiàn)優(yōu)惠卷秒殺 一人一單

    CSDN話題挑戰(zhàn)賽第2期 參賽話題:Java技術(shù)分享 在分布式系統(tǒng)中,經(jīng)常需要使用 全局唯一ID 查找對應(yīng)的數(shù)據(jù)。產(chǎn)生這種ID需要保證系統(tǒng)全局唯一,而且要高性能以及占用相對較少的空間。 全局唯一ID在數(shù)據(jù)庫中一般會被設(shè)成 主鍵 ,這樣為了保證數(shù)據(jù)插入時索引的快速建立,還需

    2024年02月03日
    瀏覽(25)
  • Spring Boot 整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    Spring Boot 整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    本文主要講了Spring Security文章,如果有什么需要改進的地方還請大佬指出?? ??作者簡介:大家好,我是青衿?? ??博客首頁:CSDN主頁放風(fēng)講故事 ??每日一句:努力一點,優(yōu)秀一點 Spring Security Spring Security是一個強大且高度可定制的身份驗證和訪問控制框架。它是保護基

    2024年02月05日
    瀏覽(21)
  • Spring Boot整合Redis

    Spring Boot整合Redis

    Redis是一個開源(BSD許可)的、內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息中間件,并提供多種語言的API。 Redis支持多種類型的數(shù)據(jù)結(jié)構(gòu),如 字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)與范圍查詢、bitmaps、 hyperlo

    2024年02月09日
    瀏覽(25)
  • 21 Spring Boot整合Redis

    21 Spring Boot整合Redis

    ? ? 目錄 一、Redis簡介 二、創(chuàng)建springboot整合redis工程 三、添加依賴 四、配置Yml 五、創(chuàng)建Redis配置類? 六、創(chuàng)建Redis工具類,封裝Redis的api 七、操作Redis? 八、驗證 ? ? ? 簡單來說 Redis 就是一個使用 C 語言開發(fā)的數(shù)據(jù)庫,不過與傳統(tǒng)數(shù)據(jù)庫不同的是 Redis 的數(shù)據(jù)是存在內(nèi)存中的

    2024年02月09日
    瀏覽(22)
  • spring boot 簡單整合 Redis

    2024年02月12日
    瀏覽(19)
  • Spring Boot整合Redis的高效數(shù)據(jù)緩存實踐

    Spring Boot整合Redis的高效數(shù)據(jù)緩存實踐

    引言 在現(xiàn)代Web應(yīng)用開發(fā)中,數(shù)據(jù)緩存是提高系統(tǒng)性能和響應(yīng)速度的關(guān)鍵。Redis作為一種高性能的緩存和數(shù)據(jù)存儲解決方案,被廣泛應(yīng)用于各種場景。本文將研究如何使用Spring Boot整合Redis,通過這個強大的緩存工具提高應(yīng)用的性能和可伸縮性。 整合redis,需要先安裝redis Redis?

    2024年01月22日
    瀏覽(93)
  • Spring Boot 整合 Redis,使用 RedisTemplate 客戶端

    Spring Boot 整合 Redis,使用 RedisTemplate 客戶端

    1.1.1 添加依賴 redis 的依賴: 1.1.2 yml 配置文件 1.1.3 Config 配置文件 1.1.4 使用示例 注入 RedisTemplate,即可操作 Redis,簡單示例如下: 1.2.1 RedisTemplate 簡介 RedisTemplate 是 Spring Data Redis 項目的一部分,旨在簡化在Java應(yīng)用程序中使用 Redis 的過程。它提供了一組簡單的方法,可以在

    2024年02月09日
    瀏覽(28)
  • Spring Boot 整合 Redis 全面教程:從配置到使用

    Redis 是一種高性能的鍵值存儲數(shù)據(jù)庫,而 Spring Boot 是一個簡化了開發(fā)過程的 Java 框架。將兩者結(jié)合,可以輕松地在 Spring Boot 項目中使用 Redis 來實現(xiàn)數(shù)據(jù)緩存、會話管理和分布式鎖等功能。 在 pom.xml 文件中添加 Redis 相關(guān)依賴 在 application.properties 或 application.yml 配置文件中添

    2024年02月13日
    瀏覽(23)
  • Springboot 實踐(13)spring boot 整合RabbitMq

    前文講解了RabbitMQ的下載和安裝,此文講解springboot整合RabbitMq實現(xiàn)消息的發(fā)送和消費。 1、創(chuàng)建web project項目,名稱為“SpringbootAction-RabbitMQ” 2、修改pom.xml文件,添加amqp使用jar包 ?? !--? RabbitMQ -- ??? ????dependency ??????????? groupIdorg.springframework.boot/groupId ????????

    2024年02月09日
    瀏覽(23)
  • Spring Boot系統(tǒng)之高可用限流實現(xiàn)解決方案

    Spring Boot系統(tǒng)之高可用限流實現(xiàn)解決方案

    1.什么是限流 限流是對某一時間窗口內(nèi)的請求數(shù)進行限制,保持系統(tǒng)的可用性和穩(wěn)定性,防止因流量暴增而導(dǎo)致的系統(tǒng)運行緩慢或宕機。 為什么需要限流 其實限流思想在生活中隨處可見,例如景區(qū)限流,防止人滿為患。熱門餐飲需要排隊就餐等?;氐交ヂ?lián)網(wǎng)網(wǎng)絡(luò)上,同樣也

    2024年02月11日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包