示例#1
0
        public async Task <T> Obter <T>(string nomeChave, Func <Task <T> > buscarDados, int minutosParaExpirar = 720, bool utilizarGZip = false)
        {
            try
            {
                var stringCache = distributedCache.GetString(nomeChave);
                if (!string.IsNullOrWhiteSpace(stringCache))
                {
                    if (utilizarGZip)
                    {
                        stringCache = UtilGZip.Descomprimir(Convert.FromBase64String(stringCache));
                    }
                    return(JsonConvert.DeserializeObject <T>(stringCache));
                }

                var dados = await buscarDados();

                await SalvarAsync(nomeChave, JsonConvert.SerializeObject(dados), minutosParaExpirar, utilizarGZip);

                return(dados);
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                servicoLog.Registrar(ex);
                return(await buscarDados());
            }
        }
示例#2
0
        public string Obter(string nomeChave, bool utilizarGZip = false)
        {
            var inicioOperacao = DateTime.UtcNow;
            var timer          = System.Diagnostics.Stopwatch.StartNew();

            try
            {
                var cacheParaRetorno = distributedCache.GetString(nomeChave);
                timer.Stop();
                servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, "Obtendo", inicioOperacao, timer.Elapsed, true);

                if (utilizarGZip)
                {
                    cacheParaRetorno = UtilGZip.Descomprimir(Convert.FromBase64String(cacheParaRetorno));
                }

                return(cacheParaRetorno);
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                servicoLog.Registrar(ex);
                timer.Stop();

                servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, $"Obtendo - Erro {ex.Message}", inicioOperacao, timer.Elapsed, false);
                return(null);
            }
        }
示例#3
0
        public void Salvar(string nomeChave, string valor, int minutosParaExpirar = 720, bool utilizarGZip = false)
        {
            try
            {
                var dbCache = connectionMultiplexerAe.GetDatabase();

                if (dbCache == null)
                {
                    return;
                }

                if (utilizarGZip)
                {
                    var valorComprimido = UtilGZip.Comprimir(valor);
                    valor = Convert.ToBase64String(valorComprimido);
                }

                var redisKey  = new RedisKey(nomeChave);
                var rediValue = new RedisValue(valor);

                dbCache.StringSet(redisKey, rediValue, TimeSpan.FromMinutes(minutosParaExpirar));
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                //servicoLog.Registrar(ex);
            }
        }
示例#4
0
        public async Task SalvarAsync(string nomeChave, string valor, int minutosParaExpirar = 720, bool utilizarGZip = false)
        {
            var inicioOperacao = DateTime.UtcNow;
            var timer          = System.Diagnostics.Stopwatch.StartNew();

            try
            {
                if (utilizarGZip)
                {
                    var valorComprimido = UtilGZip.Comprimir(valor);
                    valor = System.Convert.ToBase64String(valorComprimido);
                }

                await distributedCache.SetStringAsync(nomeChave, valor, new DistributedCacheEntryOptions()
                                                      .SetAbsoluteExpiration(TimeSpan.FromMinutes(minutosParaExpirar)));

                timer.Stop();
                servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, "Salvar async", inicioOperacao, timer.Elapsed, true);
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                timer.Stop();
                servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, "Salvar async", inicioOperacao, timer.Elapsed, false);
                servicoLog.Registrar(ex);
            }
        }
示例#5
0
        public async Task <T> ObterAsync <T>(string nomeChave, Func <Task <T> > buscarDados, int minutosParaExpirar = 720, bool utilizarGZip = false)
        {
            var inicioOperacao = DateTime.UtcNow;
            var timer          = System.Diagnostics.Stopwatch.StartNew();

            try
            {
                var dbCache     = connectionMultiplexerAe.GetDatabase();
                var stringCache = dbCache != null ? await connectionMultiplexerAe.GetDatabase()?.StringGetAsync(nomeChave) : RedisValue.Null;

                timer.Stop();
                // servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, "Obtendo Async", inicioOperacao, timer.Elapsed, true);

                if (!stringCache.IsNullOrEmpty)
                {
                    if (utilizarGZip)
                    {
                        stringCache = UtilGZip.Descomprimir(Convert.FromBase64String(stringCache));
                    }
                    return(JsonConvert.DeserializeObject <T>(stringCache));
                }

                var dados = await buscarDados();

                await SalvarAsync(nomeChave, dados, minutosParaExpirar, utilizarGZip);

                return(dados);
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                timer.Stop();
                return(await buscarDados());
            }
        }
示例#6
0
        public async Task <string> ObterAsync(string nomeChave, bool utilizarGZip = false)
        {
            var inicioOperacao = DateTime.UtcNow;
            var timer          = System.Diagnostics.Stopwatch.StartNew();

            try
            {
                var dbCache          = connectionMultiplexerAe.GetDatabase();
                var cacheParaRetorno = dbCache != null ? await dbCache.StringGetAsync(nomeChave) : RedisValue.Null;

                timer.Stop();
                //servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, "Obtendo async", inicioOperacao, timer.Elapsed, true);

                if (!cacheParaRetorno.IsNullOrEmpty && utilizarGZip)
                {
                    cacheParaRetorno = UtilGZip.Descomprimir(Convert.FromBase64String(cacheParaRetorno));
                }

                return(cacheParaRetorno);
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                //servicoLog.Registrar(ex);
                timer.Stop();
                //servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, $"Obtendo async - Erro {ex.Message}", inicioOperacao, timer.Elapsed, false);
                return(null);
            }
        }
        public async Task <T> Obter <T>(string nomeChave, Func <Task <T> > buscarDados, int minutosParaExpirar = 720, bool utilizarGZip = false)
        {
            var inicioOperacao = DateTime.UtcNow;
            var timer          = System.Diagnostics.Stopwatch.StartNew();

            try
            {
                var stringCache = memoryCache.Get <string>(nomeChave);

                timer.Stop();
                servicoLog.RegistrarDependenciaAppInsights("MemoryCache", nomeChave, "Obtendo", inicioOperacao, timer.Elapsed, true);

                if (!string.IsNullOrWhiteSpace(stringCache))
                {
                    if (utilizarGZip)
                    {
                        stringCache = UtilGZip.Descomprimir(Convert.FromBase64String(stringCache));
                    }
                    return(JsonConvert.DeserializeObject <T>(stringCache));
                }

                var dados = await buscarDados();

                await SalvarAsync(nomeChave, JsonConvert.SerializeObject(dados), minutosParaExpirar, utilizarGZip);

                return(dados);
            }
            catch (Exception ex)
            {
                servicoLog.Registrar(ex);
                timer.Stop();

                servicoLog.RegistrarDependenciaAppInsights("MemoryCache", nomeChave, $"Obtendo - Erro {ex.Message}", inicioOperacao, timer.Elapsed, false);
                return(default);
示例#8
0
        public void Salvar(string nomeChave, string valor, int minutosParaExpirar = 720, bool utilizarGZip = false)
        {
            try
            {
                if (utilizarGZip)
                {
                    var valorComprimido = UtilGZip.Comprimir(valor);
                    valor = Convert.ToBase64String(valorComprimido);
                }

                distributedCache.SetString(nomeChave, valor, new DistributedCacheEntryOptions()
                                           .SetAbsoluteExpiration(TimeSpan.FromMinutes(minutosParaExpirar)));
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                servicoLog.Registrar(ex);
            }
        }
示例#9
0
 public T Obter <T>(string nomeChave, bool utilizarGZip = false)
 {
     try
     {
         var stringCache = connectionMultiplexerAe.GetDatabase()?.StringGet(nomeChave).ToString();
         if (!string.IsNullOrWhiteSpace(stringCache))
         {
             if (utilizarGZip)
             {
                 stringCache = UtilGZip.Descomprimir(Convert.FromBase64String(stringCache));
             }
             return(JsonConvert.DeserializeObject <T>(stringCache));
         }
     }
     catch (Exception ex)
     {
         //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
     }
     return(default(T));
 }
示例#10
0
 public T Obter <T>(string nomeChave, bool utilizarGZip = false)
 {
     try
     {
         var stringCache = distributedCache.GetString(nomeChave);
         if (!string.IsNullOrWhiteSpace(stringCache))
         {
             if (utilizarGZip)
             {
                 stringCache = UtilGZip.Descomprimir(Convert.FromBase64String(stringCache));
             }
             return(JsonConvert.DeserializeObject <T>(stringCache));
         }
     }
     catch (Exception ex)
     {
         //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
         servicoLog.Registrar(ex);
     }
     return(default(T));
 }
示例#11
0
        public string Obter(string nomeChave, bool utilizarGZip = false)
        {
            var inicioOperacao = DateTime.UtcNow;
            var timer          = System.Diagnostics.Stopwatch.StartNew();

            try
            {
                var cacheParaRetorno = connectionMultiplexerAe.GetDatabase()?.StringGet(nomeChave);
                timer.Stop();
                if (utilizarGZip)
                {
                    cacheParaRetorno = UtilGZip.Descomprimir(Convert.FromBase64String(cacheParaRetorno));
                }

                return(cacheParaRetorno);
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                timer.Stop();
                return(null);
            }
        }
示例#12
0
        public async Task SalvarAsync(string nomeChave, string valor, int minutosParaExpirar = 720, bool utilizarGZip = false)
        {
            var inicioOperacao = DateTime.UtcNow;
            var timer          = System.Diagnostics.Stopwatch.StartNew();

            try
            {
                var dbCache = connectionMultiplexerAe.GetDatabase();

                if (dbCache == null)
                {
                    return;
                }

                if (!string.IsNullOrWhiteSpace(valor) && valor != "[]")
                {
                    if (utilizarGZip)
                    {
                        var valorComprimido = UtilGZip.Comprimir(valor);
                        valor = Convert.ToBase64String(valorComprimido);
                    }

                    await dbCache.StringSetAsync(nomeChave, valor, TimeSpan.FromMinutes(minutosParaExpirar));

                    timer.Stop();
                    //servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, "Salvar async", inicioOperacao, timer.Elapsed, true);
                }
            }
            catch (Exception ex)
            {
                //Caso o cache esteja indisponível a aplicação precisa continuar funcionando mesmo sem o cache
                timer.Stop();
                //servicoLog.RegistrarDependenciaAppInsights("Redis", nomeChave, "Salvar async", inicioOperacao, timer.Elapsed, false);
                //servicoLog.Registrar(ex);
            }
        }