Кэширование данных в ASP.Net - PullRequest
7 голосов
/ 18 сентября 2011

Мне нужно заполнить некоторые выпадающие окна из некоторых справочных данных.т.е. список городов, список стран и т. д. Мне нужно заполнить его в различных веб-формах.Я думаю, что мы должны кэшировать эти данные в нашем приложении, чтобы мы не обращались к базе данных в каждой форме.Я новичок в кешировании и ASP.Net.Пожалуйста, предложите мне, как это сделать.

Ответы [ 2 ]

13 голосов
/ 18 сентября 2011

Я всегда добавляю следующий класс ко всем моим проектам, которые дают мне легкий доступ к объекту Cache.Реализация этого, следуя ответу Хасана Хана, была бы хорошим путем.

public static class CacheHelper
    {
        /// <summary>
        /// Insert value into the cache using
        /// appropriate name/value pairs
        /// </summary>
        /// <typeparam name="T">Type of cached item</typeparam>
        /// <param name="o">Item to be cached</param>
        /// <param name="key">Name of item</param>
        public static void Add<T>(T o, string key, double Timeout)
        {
            HttpContext.Current.Cache.Insert(
                key,
                o,
                null,
                DateTime.Now.AddMinutes(Timeout),
                System.Web.Caching.Cache.NoSlidingExpiration);
        }

        /// <summary>
        /// Remove item from cache
        /// </summary>
        /// <param name="key">Name of cached item</param>
        public static void Clear(string key)
        {
            HttpContext.Current.Cache.Remove(key);
        }

        /// <summary>
        /// Check for item in cache
        /// </summary>
        /// <param name="key">Name of cached item</param>
        /// <returns></returns>
        public static bool Exists(string key)
        {
            return HttpContext.Current.Cache[key] != null;
        }

        /// <summary>
        /// Retrieve cached item
        /// </summary>
        /// <typeparam name="T">Type of cached item</typeparam>
        /// <param name="key">Name of cached item</param>
        /// <param name="value">Cached value. Default(T) if item doesn't exist.</param>
        /// <returns>Cached item as type</returns>
        public static bool Get<T>(string key, out T value)
        {
            try
            {
                if (!Exists(key))
                {
                    value = default(T);
                    return false;
                }

                value = (T)HttpContext.Current.Cache[key];
            }
            catch
            {
                value = default(T);
                return false;
            }

            return true;
        }
    }
2 голосов
/ 18 сентября 2011

Из другого вашего вопроса я читал, что вы используете 3-х уровневую архитектуру с уровнем dal, business и presentation.

Итак, я предполагаю, что у вас есть некоторый класс доступа к данным. Идеально было бы иметь кэшированную реализацию одного и того же класса и выполнять кеширование в этом.

Например: если у вас есть интерфейс IUserRepository, то класс UserRepository будет реализовывать его и добавлять / удалять / обновлять записи в БД с помощью методов, тогда вы также можете иметь CachedUserRepository, который будет содержать экземпляр объекта UserRepository, а в методах get он сначала просматривает кеш для некоторого ключа (полученного из параметров метода), и если элемент найден, он вернет его, в противном случае вы вызываете метод для внутреннего объекта; получить данные; добавить в кеш и вернуть его.

Ваш CachedUserRepository также будет иметь экземпляр объекта кеша, очевидно. Вы можете посмотреть http://msdn.microsoft.com/en-us/library/18c1wd61(v=vs.85).aspx, чтобы узнать, как использовать объект Cache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...