FireflySoft.RateLimit.Core
2.1.0
See the version list below for details.
dotnet add package FireflySoft.RateLimit.Core --version 2.1.0
NuGet\Install-Package FireflySoft.RateLimit.Core -Version 2.1.0
<PackageReference Include="FireflySoft.RateLimit.Core" Version="2.1.0" />
paket add FireflySoft.RateLimit.Core --version 2.1.0
#r "nuget: FireflySoft.RateLimit.Core, 2.1.0"
// Install FireflySoft.RateLimit.Core as a Cake Addin #addin nuget:?package=FireflySoft.RateLimit.Core&version=2.1.0 // Install FireflySoft.RateLimit.Core as a Cake Tool #tool nuget:?package=FireflySoft.RateLimit.Core&version=2.1.0
Github: https://github.com/bosima/FireflySoft.RateLimit
Introduction
Fireflysoft.RateLimit is a rate limiting library based on .Net standard. Its core is simple and lightweight, and can flexibly meet the rate limiting needs of many scenarios.
Features
- Multiple rate limiting algorithms: built-in fixed window, sliding window, leaky bucket, token bucket, and can be extended.
- Multiple counting storage: memory and Redis (including cluster).
- Distributed friendly: supports unified counting of distributed programs with Redis storage.
- Flexible rate limiting targets: each data can be extracted from the request to set rate limiting targets.
- Support rate limit penalty: the client can be locked for a period of time after the rate limit is triggered.
- Time window enhancement: support to the millisecond level; support starting from the starting point of time periods such as seconds, minutes, hours, dates, etc.
- Real-time tracking: the number of requests processed and the remaining allowed requests in the current counting cycle, as well as the reset time of the counting cycle.
- Dynamically change the rules: support the dynamic change of the rate limiting rules when the program is running.
- Custom error: you can customize the error code and error message after the current limit is triggered.
- Universality: in principle, it can meet any scenario that requires rate limiting.
Usage
Use IAlgorithm to filter every request, process the return value of Check method.
// Rule
var fixedWindowRules = new FixedWindowRule[]
{
new FixedWindowRule()
{
Id = "3",
StatWindow=TimeSpan.FromSeconds(1),
LimitNumber=30,
ExtractTarget = (request) =>
{
return (request as SimulationRequest).RequestResource;
},
CheckRuleMatching = (request) =>
{
return true;
},
}
};
// Algorithm
IAlgorithm algorithm = new InProcessFixedWindowAlgorithm(fixedWindowRules);
// Check
var result = algorithm.Check(new SimulationRequest()
{
RequestId = Guid.NewGuid().ToString(),
RequestResource = "home",
Parameters = new Dictionary<string, string>() {
{ "from","sample" },
}
});
SimulationRequest is a custom request that you can modify to any type.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 5.0.0)
- Newtonsoft.Json (>= 12.0.3)
- Nito.AsyncEx (>= 5.1.0)
- Nito.AsyncEx.Coordination (>= 5.1.0)
- StackExchange.Redis (>= 2.2.4)
- System.Linq.Async (>= 5.0.0)
- System.Runtime.Caching (>= 4.7.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on FireflySoft.RateLimit.Core:
Package | Downloads |
---|---|
FireflySoft.RateLimit.AspNetCore
A rate limit library for ASP.NET Core. |
|
FireflySoft.MultiRateLimit.AspNetCore
A rate limit library for ASP.NET Core. |
|
FireflySoft.RateLimit.AspNet
A rate limit library for ASP.NET. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Add ConfigureAwait(false) for async method;
Improve the processing logic when updating the limit rules;
Unified Count value returned by the leaky bucket;
Add peek method to view the current count value;
Fix some bugs.