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
猜你喜欢
- Unity之Luaframework框架lua调用C#方法 2023-04-28
- 详解c# PLINQ中的分区 2023-03-04
- C#中的协变与逆变深入讲解 2023-01-06
- C#实现备忘录功能 2022-11-19
- c# – 为什么这个内存没有得到清理,或者根本没有分配? 2023-09-19
- C#中Backgroundworker与Thread的区别 2023-06-14
- C# 实现Zookeeper分布式锁的参考示例 2023-04-22
- .net core 和 WPF 开发升讯威在线客服系统:系统总体架构 2023-09-27
- C# TcpClient网络编程传输文件的示例 2023-04-14
- Unity ScrollView实现无限滑动效果 2023-04-27