整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          并發(fā)請(qǐng)求太多,服務(wù)器崩潰了?看看 ASP.NET Core Web API 如何對(duì)請(qǐng)求進(jìn)行限流

          請(qǐng)求加時(shí)間戳_請(qǐng)求中時(shí)間戳與服務(wù)器_請(qǐng)求時(shí)間戳已過(guò)期

          前言

          請(qǐng)求限流(Rate )主要是一種用于控制客戶端對(duì)服務(wù)器的請(qǐng)求頻率的機(jī)制。

          其目的是限制客戶端在一定時(shí)間內(nèi)可以發(fā)送的請(qǐng)求數(shù)量,保護(hù)服務(wù)器免受過(guò)多請(qǐng)求的影響,確保系統(tǒng)的穩(wěn)定性和可靠性。

          請(qǐng)求限流通常會(huì)基于以下幾個(gè)因素來(lái)進(jìn)行限制:

          時(shí)間窗口:規(guī)定了在多長(zhǎng)時(shí)間內(nèi)允許的請(qǐng)求次數(shù)

          請(qǐng)求配額:在時(shí)間窗口內(nèi)允許的最大請(qǐng)求數(shù)量

          客戶端標(biāo)識(shí):根據(jù)客戶端的 IP 地址、用戶標(biāo)識(shí)或其他標(biāo)識(shí)符來(lái)進(jìn)行限流

          請(qǐng)求時(shí)間戳已過(guò)期_請(qǐng)求加時(shí)間戳_請(qǐng)求中時(shí)間戳與服務(wù)器

          請(qǐng)求限流技術(shù)可以應(yīng)用在很多場(chǎng)景,本文主要講述 ASP.NET Core Web API 如何使用操作篩選器對(duì)請(qǐng)求進(jìn)行限流。

          Step By Step 步驟

          創(chuàng)建一個(gè)ASP.NET Core Web API 項(xiàng)目

          編寫自定義的操作篩選器 ,實(shí)現(xiàn) "1s內(nèi)只允許最多有一個(gè)來(lái)自同一個(gè)IP地址的請(qǐng)求"(留意注釋)

          using?Microsoft.AspNetCore.Mvc;
          using?Microsoft.AspNetCore.Mvc.Filters;
          using?Microsoft.Extensions.Caching.Memory;

          public?class?RateLimitFilter?:?IAsyncActionFilter
          {
          ?private?readonly?IMemoryCache?memCache;

          ?//?注入的IMemoryCache
          ?public?RateLimitFilter(IMemoryCache?memCache)
          ?{
          ??this.memCache?=?memCache;
          ?}

          ?public?Task?OnActionExecutionAsync(
          ??ActionExecutingContext?context,?
          ??ActionExecutionDelegate?next
          )

          ?{
          ??//?通過(guò)注入的?IMemoryCache?來(lái)記錄用戶上一次訪問(wèn)的時(shí)間戳
          ??//?在分布式系統(tǒng)下可以改用分布式緩存來(lái)代替內(nèi)存緩存
          ??string?removeIP?=?context.HttpContext.Connection.RemoteIpAddress!.ToString();
          ??string?cacheKey?=?$"LastVisitTick_{removeIP}";
          ??
          ??//?從緩存中獲取這個(gè)客戶端IP地址上一次訪問(wèn)服務(wù)器的時(shí)間
          ??long??lastTick?=?memCache.Get<long?>(cacheKey);
          ??if?(lastTick?==?null?||?Environment.TickCount64?-?lastTick?>?1000)
          ??{
          ???//?如果緩存中不存在上一次訪問(wèn)時(shí)間或者上一次訪問(wèn)時(shí)間距離現(xiàn)在已經(jīng)超過(guò)?1s,則通過(guò)?next?來(lái)執(zhí)行后面的篩選器
          ???memCache.Set(cacheKey,?Environment.TickCount64,?TimeSpan.FromSeconds(10));
          ???return?next();
          ??}
          ??else
          ??{
          ???//?否則說(shuō)明?IP?頻繁訪問(wèn),不執(zhí)行?next,相當(dāng)于終止操作方法的執(zhí)行
          ???context.Result?=?new?ContentResult?{?StatusCode?=?429?};
          ???return?Task.CompletedTask;
          ??}
          ?}
          }

          打開 Program.cs,注冊(cè)這個(gè)操作篩選器

          using?Microsoft.AspNetCore.Mvc;

          var?builder?=?WebApplication.CreateBuilder(args);

          //?Add?services?to?the?container.

          builder.Services.AddControllers();
          //?Learn?more?about?configuring?Swagger/OpenAPI?at?https://aka.ms/aspnetcore/swashbuckle
          builder.Services.AddEndpointsApiExplorer();
          builder.Services.AddSwaggerGen();

          //?注冊(cè)內(nèi)存緩存服務(wù)
          builder.Services.AddMemoryCache();

          //?注冊(cè)請(qǐng)求限流過(guò)濾器
          builder.Services.Configure(options?=>?{?
          ?options.Filters.Add();
          });

          var?app?=?builder.Build();

          //?Configure?the?HTTP?request?pipeline.
          if?(app.Environment.IsDevelopment())
          {
          ?app.UseSwagger();
          ?app.UseSwaggerUI();
          }

          app.UseHttpsRedirection();

          app.UseAuthorization();

          app.MapControllers();

          app.Run();

          請(qǐng)求時(shí)間戳已過(guò)期_請(qǐng)求加時(shí)間戳_請(qǐng)求中時(shí)間戳與服務(wù)器

          測(cè)試

          啟動(dòng)項(xiàng)目,并且訪問(wèn)接口,如果訪問(wèn)頻率不高的話,接口能夠正常工作。

          如果訪問(wèn)頻率很高的話,服務(wù)器就會(huì)提示 "Only once per second!"

          總結(jié)

          在操作篩選器中,通過(guò) await next() 來(lái)執(zhí)行下一個(gè)篩選器,

          如果沒有下一個(gè)篩選器,程序就會(huì)執(zhí)行目標(biāo)操作方法。

          如果不調(diào)用 await next(),就可以終止操作方法的執(zhí)行了

          阿里云服務(wù)器突然連不上mysql

          簡(jiǎn)介

          數(shù)據(jù)庫(kù)突然連接不上_提示數(shù)據(jù)庫(kù)連接失敗_庫(kù)連接突然數(shù)據(jù)上不去

          在使用阿里云服務(wù)器時(shí),有時(shí)候會(huì)遇到無(wú)法連接到MySQL數(shù)據(jù)庫(kù)的問(wèn)題。本文將介紹一些可能導(dǎo)致這個(gè)問(wèn)題的原因,并提供解決方法。

          問(wèn)題分析

          當(dāng)阿里云服務(wù)器突然連不上MySQL數(shù)據(jù)庫(kù)時(shí),可能有以下幾個(gè)原因:

          網(wǎng)絡(luò)配置錯(cuò)誤:服務(wù)器的網(wǎng)絡(luò)配置可能會(huì)導(dǎo)致無(wú)法連接到MySQL數(shù)據(jù)庫(kù)。例如,防火墻設(shè)置、IP地址限制等。

          MySQL服務(wù)未啟動(dòng):如果MySQL服務(wù)沒有正常啟動(dòng),那么服務(wù)器將無(wú)法連接到數(shù)據(jù)庫(kù)。

          數(shù)據(jù)庫(kù)權(quán)限問(wèn)題:如果服務(wù)器用戶沒有足夠的權(quán)限訪問(wèn)MySQL數(shù)據(jù)庫(kù),那么連接將被拒絕。

          庫(kù)連接突然數(shù)據(jù)上不去_提示數(shù)據(jù)庫(kù)連接失敗_數(shù)據(jù)庫(kù)突然連接不上

          數(shù)據(jù)庫(kù)連接超時(shí):如果服務(wù)器連接到MySQL數(shù)據(jù)庫(kù)的時(shí)間過(guò)長(zhǎng),可能會(huì)導(dǎo)致連接失敗。

          解決方法

          針對(duì)以上問(wèn)題,可以嘗試以下解決方法:

          1. 檢查網(wǎng)絡(luò)配置

          首先,確保服務(wù)器的網(wǎng)絡(luò)配置正確。檢查防火墻設(shè)置,確保允許來(lái)自服務(wù)器的連接請(qǐng)求通過(guò)。同時(shí),確認(rèn)服務(wù)器的IP地址是否正確,并且沒有被限制。

          2. 啟動(dòng)MySQL服務(wù)

          檢查MySQL服務(wù)是否已啟動(dòng)??梢酝ㄟ^(guò)命令行或者管理界面來(lái)查看MySQL服務(wù)的狀態(tài)。如果沒有啟動(dòng),可以手動(dòng)啟動(dòng)MySQL服務(wù)。

          數(shù)據(jù)庫(kù)突然連接不上_提示數(shù)據(jù)庫(kù)連接失敗_庫(kù)連接突然數(shù)據(jù)上不去

          3. 檢查數(shù)據(jù)庫(kù)權(quán)限

          確認(rèn)服務(wù)器用戶是否有足夠的權(quán)限訪問(wèn)MySQL數(shù)據(jù)庫(kù)??梢酝ㄟ^(guò)修改MySQL的權(quán)限表來(lái)授予服務(wù)器用戶相應(yīng)的權(quán)限。

          4. 調(diào)整數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間

          如果服務(wù)器連接到MySQL數(shù)據(jù)庫(kù)的時(shí)間過(guò)長(zhǎng),可以嘗試調(diào)整數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間。可以在MySQL的配置文件中找到相關(guān)的參數(shù),并將其適當(dāng)延長(zhǎng)。

          結(jié)論

          當(dāng)阿里云服務(wù)器突然連不上MySQL數(shù)據(jù)庫(kù)時(shí),可能是由于網(wǎng)絡(luò)配置錯(cuò)誤、MySQL服務(wù)未啟動(dòng)、數(shù)據(jù)庫(kù)權(quán)限問(wèn)題或數(shù)據(jù)庫(kù)連接超時(shí)等原因所致。通過(guò)檢查網(wǎng)絡(luò)配置、啟動(dòng)MySQL服務(wù)、檢查數(shù)據(jù)庫(kù)權(quán)限和調(diào)整數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間,可以解決這些問(wèn)題并重新連接到MySQL數(shù)據(jù)庫(kù)。如果問(wèn)題仍然存在,建議聯(lián)系阿里云技術(shù)支持獲取進(jìn)一步的幫助和支持。

          希望本文能夠幫助到遇到類似問(wèn)題的讀者,順利解決阿里云服務(wù)器連接MySQL數(shù)據(jù)庫(kù)的問(wèn)題。


          主站蜘蛛池模板: 久久久精品人妻一区亚美研究所| 国产午夜精品一区二区三区极品| 日韩精品中文字幕视频一区| 风间由美在线亚洲一区| 男人免费视频一区二区在线观看 | 四虎成人精品一区二区免费网站 | 亚欧免费视频一区二区三区| 国产视频一区在线播放| 亚洲一区二区三区精品视频| 国产日韩精品一区二区三区| 精品一区二区ww| 无码丰满熟妇浪潮一区二区AV| 午夜在线视频一区二区三区| 日韩AV片无码一区二区不卡 | 精品国产福利一区二区| 无码国产精品一区二区免费虚拟VR| 亚洲国产一区在线观看| 精品欧洲AV无码一区二区男男| 国产精品久久一区二区三区| 性色AV一区二区三区天美传媒| 天堂va在线高清一区| 亚洲AV日韩综合一区| 国产伦精品一区二区三区不卡| 丰满爆乳无码一区二区三区| 精品国产一区二区三区av片| 日本在线观看一区二区三区| 久久精品一区二区影院| 亚州日本乱码一区二区三区 | 无码少妇一区二区浪潮av| 国产vr一区二区在线观看| 国产乱码精品一区二区三区中文| 国产精品美女一区二区视频| 久久精品国产AV一区二区三区| 国产精品久久久久一区二区三区| 日本在线视频一区| 国产成人精品一区二区三区免费 | 丝袜人妻一区二区三区| 麻豆一区二区99久久久久| 亚洲AV无码一区二区乱子仑| 无码AV一区二区三区无码| 久久久一区二区三区|