/// <summary> /// 检验是否启用限流规则 /// </summary> /// <param name="path">请求地址</param> /// <returns></returns> private async Task <bool> CheckReRouteRuleAsync(string path) { var region = CzarCacheRegion.ClientRoleModelRegion; var key = path; var cacheResult = _ocelotCache.Get(key, region); if (cacheResult != null) {//提取缓存数据 return(cacheResult.Role); } else {//重新获取限流策略 var result = await _clientRateLimitRepository.CheckReRouteRuleAsync(path); _ocelotCache.Add(key, new ClientRoleModel() { CacheTime = DateTime.Now, Role = result }, TimeSpan.FromSeconds(_options.CzarCacheTime), region); return(result); } }
public async Task UpdateClientRoleCache(string path) { var region = CzarCacheRegion.ClientRoleModelRegion; var key = path; key = CzarOcelotHelper.GetKey(_options.RedisOcelotKeyPrefix, region, key); var result = await _clientRateLimitRepository.CheckReRouteRuleAsync(path); var data = new ClientRoleModel() { CacheTime = DateTime.Now, Role = result }; if (_options.ClusterEnvironment) { RedisHelper.Set(key, data); //加入redis缓存 RedisHelper.Publish(key, data.ToJson()); //发布事件 } else { _cache.Remove(key); } }