從頭開始學Redisson 限流器

2021-10-03 22:25:22 字數 1481 閱讀 6526

基於redis的分布式限流器ratelimiter可以用來在分布式環境下現在請求方的呼叫頻率。既適用於不同redisson例項下的多執行緒限流,也適用於相同redisson例項下的多執行緒限流。

ratelimter主要作用就是可以限制呼叫介面的次數。主要原理就是呼叫介面之前,需要擁有指定個令牌。限流器每秒會產生x個令牌放入令牌桶,呼叫介面需要去令牌桶裡面拿令牌。如果令牌被其它請求拿完了,那麼自然而然,當前請求就呼叫不到指定的介面。

主要使用業務場景:(1)單機或分布式情況下的快取擊穿(2)介面需要限制呼叫次數

rratelimiter ratelimiter = redisson.getratelimiter("myratelimiter");

// 初始化

// 最大流速 = 每10秒鐘產生1個令牌

ratelimiter.trysetrate(ratetype.overall, 1, 10, rateintervalunit.seconds);

//需要1個令牌

if(ratelimiter.tryacquire(1))

當前業務就是,向指定手機號傳送簡訊。但是有每10秒只允許傳送1次的限制。完全可以使用redisson限流器來完成。

package com.tyzhou.redisson.service;

import com.tyzhou.constant;

import org.apache.commons.lang3.stringutils;

import org.redisson.api.rratelimiter;

import org.redisson.api.rateintervalunit;

import org.redisson.api.ratetype;

import org.redisson.api.redissonclient;

import org.slf4j.logger;

import org.slf4j.logge***ctory;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.stereotype.service;

/** * @author zhoutianyu

* @date 2020/3/15

* @time 18:55

*/@service

public class ratelimiterservice 傳送簡訊", phone);}}

}}

呼叫者:

public void sendmsg(@requestparam string phone)

}用了乙個死迴圈,但是從日誌的列印效果上來看,每10秒才請求到一次我們的傳送簡訊介面。

從頭開始學JDK String

目錄 string 倒序 string 建構函式 string equals string 記憶體 string hashcode string startswith string endwith string indexof string lastindexof string substring ...

從頭開始學MFC

一 win32專案設計 類似於console控制台程式,win32視窗程式的入口函式類似於main 函式,稱之為winmain函式 int winapi wwinmain hinstance hinstance,例項控制代碼 hinstance hprevinstance,前乙個例項控制代碼 pws...

從頭開始學Redis

第一章 概述 1.1 redis之簡介 1.2 redis之安裝 第二章 api 2.1 redisapi之簡介 2.2 redisapi之string 2.3 redisapi之hash 2.4 redisapi之list 2.5 redisapi之set 2.6 redisapi之zset 第三...