public class RedisRateLimiter{private static Logger LOG = LogManager.GetLogger(redis-limiter);private static readonly string TIME_KEY = TIME_KEY;private static readonly string COUNTER_KEY = COUN...

public class RedisRateLimiter
{
private static Logger LOG = LogManager.GetLogger("redis-limiter");
private static readonly string TIME_KEY = "TIME_KEY";
private static readonly string COUNTER_KEY = "COUNTER_KEY";
public int MaxLimitNum { get; set; }
public RedisRateLimiter(int maxLimitNum)
{
this.MaxLimitNum = maxLimitNum;
}
public bool CheckLimit()
{
using (var redisClient = RedisUtil.GetClient())
{
if (!redisClient.ContainsKey(TIME_KEY))
{
LOG.Debug("Key Exp");
redisClient.Set<int>(TIME_KEY, 0, TimeSpan.FromSeconds(1));
redisClient.Set<long>(COUNTER_KEY, 0, TimeSpan.FromSeconds(1));
}
if (redisClient.ContainsKey(TIME_KEY))
{
var current = redisClient.IncrementValue(COUNTER_KEY);
if (current > MaxLimitNum)
{
LOG.Error("限流成功,当前值: {0}, 限制最大值:{1}", current, MaxLimitNum);
return false;
}
}
}
return true;
}
}
织梦狗教程
本文标题为:C# RedisRateLimiter


基础教程推荐
猜你喜欢
- c# 使用线程对串口serialPort进行收发数据(四种) 2023-06-22
- C# WebApi 路由机制剖析 2022-12-26
- c# – 在客户端控制台应用程序中保存SQL Server连接字符串的位置? 2023-11-10
- unity实现贪吃蛇游戏 2023-02-15
- C# 实现对PPT文档加密、解密及重置密码的操作方法 2022-11-27
- 详解CLR的内存分配和回收机制 2023-05-25
- C#中泛型容器Stack<T>的用法并实现”撤销/重做”功能 2023-07-05
- DevExpress的DateEdit设置显示日期和时间的方法 2023-06-27
- 运用示例简单讲解C#取消令牌CancellationTokenSource 2023-04-27
- C# 设置Chart的X轴为时间轴详情 2023-07-04