ObjectCache - 刷新后清除所有内容

时间:2016-12-27 22:57:11

标签: c# objectcache

我已经与ObjectCache合作了一段时间,并且在使用一段时间后我遇到了一些问题。

在浏览器中进行一些刷新后ObjectCache正在清除缓存的情况发生了什么,它发生在我的机器,开发人员和生产应用程序中。

这是我的班级(全部):

using System;
using System.Runtime.Caching;

namespace autoSCORE.Utilidade.GerenciadorCache
{
    /// <summary>
    /// Gerencia a Criação, Atualização e Exclusão de Cache.
    /// </summary>
    /// <typeparam name="T">Objeto, do tipo <see cref="T"/>, preenchido com o Tipo de Conteúdo a ser guardado no Cache.</typeparam>
    public static class Cache<T> where T : class
    {
        /// <summary>
        /// Singleton do objeto, do tipo <see cref="System.Runtime.Caching.ObjectCache"/>.
        /// </summary>
        private static ObjectCache memoryCache = MemoryCache.Default;
        /// <summary>
        /// objeto, do tipo <see cref="System.Runtime.Caching.CacheItemPolicy"/>., com as Políticas do Cache.
        /// </summary>
        private static CacheItemPolicy cacheItemPolicy = null;

        /// <summary>
        /// Cria o Cache do Item desejado.
        /// </summary>
        /// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
        /// <param name="conteudo">Objeto, do tipo <see cref="T"/>, preenchido com o Conteudo desejado.</param>
        /// <param name="persistir">Objeto, do tipo <see cref="System.Boolean"/>, preenchido com "True", para extender por 10 dias, ou "False", para extender por 60 minutos.</param>
        public static void Adicionar(string chave, T conteudo, bool persistir)
        {
            try
            {
                cacheItemPolicy = new CacheItemPolicy();
                cacheItemPolicy.Priority = CacheItemPriority.Default;
                cacheItemPolicy.SlidingExpiration = persistir ? new TimeSpan(10, 0, 0, 0) : new TimeSpan(1, 0, 0);

                memoryCache.Set(chave, conteudo, cacheItemPolicy);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Retorna o Item, do Cache, desejado.
        /// </summary>
        /// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
        /// <returns>Objeto, do tipo <see cref="T"/>, preenchido com o Conteudo recuperado.</returns>
        public static T Recuperar(string chave)
        {
            try
            {
                if (memoryCache.Contains(chave))
                {
                    var objectT = (T)memoryCache[chave];

                    if (objectT == null) return default(T);

                    System.Reflection.MethodInfo newInstanceOfObjectT =
                        objectT.GetType().GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

                    if (newInstanceOfObjectT == null) return default(T);

                    return (T)newInstanceOfObjectT.Invoke(objectT, null);
                }
                else
                {
                    return default(T);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Atualiza o Item, no Cache, desejado.
        /// </summary>
        /// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
        /// <param name="novoConteudo">Objeto, do tipo <see cref="T"/>, preenchido com o novo Conteudo desejado.</param>
        public static void Atualizar(string chave, T novoConteudo)
        {
            try
            {
                if (memoryCache.Contains(chave))
                {
                    var content = (T)memoryCache[chave];

                    content = novoConteudo;

                    memoryCache[chave] = content;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        /// <summary>
        /// Remove o Item desejado.
        /// </summary>
        /// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
        public static void Remover(string chave)
        {
            try
            {
                if (memoryCache.Contains(chave))
                {
                    memoryCache.Remove(chave);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
    }
}

谢谢和最诚挚的问候, Rodrigo Lemela Duarte

0 个答案:

没有答案