public bool LockExists(IThrottleKey key, Limiter limiter) { string lockId = CreateLockKey(key, limiter); object reslut = null; return(_store.TryGetValue(lockId, out reslut)); }
public void SetLock(IThrottleKey key, Limiter limiter) { string throttleId = CreateThrottleKey(key, limiter); _store.Remove(throttleId); string lockId = CreateLockKey(key, limiter); DateTime expiration = CurrentDate().Add(limiter.LockDuration.Value); _store.Set(lockId, true, expiration); }
private List <object> CreateBaseKeyValues(IThrottleKey key, Limiter limiter) { List <object> values = key.Values.ToList(); if (PolicyIdentityValues != null && PolicyIdentityValues.Length > 0) { values.InsertRange(0, PolicyIdentityValues); } return(values); }
private long?GetLimiterCount(TimeSpan span) { Limiter item = Limiters.FirstOrDefault(l => l.Period == span); long? result = null; if (item != null) { result = item.Count; } return(result); }
/// <summary> /// 获取数量 /// </summary> /// <param name="key"></param> /// <param name="limiter"></param> /// <returns></returns> public long?GetThrottleCount(IThrottleKey key, Limiter limiter) { string id = CreateThrottleKey(key, limiter); var cacheItem = _store.Get(id) as ThrottleCacheItem; if (cacheItem != null) { return(cacheItem.Count); } return(null); }
public string CreateLockKey(IThrottleKey key, Limiter limiter) { List <object> values = CreateBaseKeyValues(key, limiter); string lockKeySuffix = TimeSpanToFriendlyString(limiter.LockDuration.Value); values.Add("lock"); values.Add(lockKeySuffix); string id = string.Join(":", values); return(id); }
public string CreateThrottleKey(IThrottleKey key, Limiter limiter) { List <object> values = CreateBaseKeyValues(key, limiter); string countKey = TimeSpanToFriendlyString(limiter.Period); values.Add(countKey); //使用unix时间戳 if (limiter.Period.TotalSeconds == 1) { values.Add(GetUnixTimestamp()); } string id = string.Join(":", values); return(id); }
public void AddOrIncrementWithExpiration(IThrottleKey key, Limiter limiter) { string id = CreateThrottleKey(key, limiter); var cacheItem = _store.Get(id) as ThrottleCacheItem; if (cacheItem != null) { cacheItem.Count = cacheItem.Count + 1; Console.WriteLine(cacheItem.Count); } else { cacheItem = new ThrottleCacheItem() { Count = 1, Expiration = CurrentDate().Add(limiter.Period) }; } _store.Set(id, cacheItem, cacheItem.Expiration); }
private void SetLimiter(TimeSpan span, long?count) { Limiter item = Limiters.FirstOrDefault(l => l.Period == span); if (item != null) { _limits.Remove(item); } if (!count.HasValue) { return; } item = new Limiter { Count = count.Value, Period = span }; _limits.Add(item); }
public void RemoveThrottle(IThrottleKey key, Limiter limiter) { string lockId = CreateThrottleKey(key, limiter); _store.Remove(lockId); }