Кэширование сложного типа данных
Я работаю над приложением, в котором намереваюсь загрузить запрошенные данные и кэшировать элементы для последующих запросов к тому же элементу.
Если элемента нет в кэше, я намерен сделать вызов базы данных и кэшировать нужные элементы в коллекцию для последующего использования.
Это Продукт сущность:
ProductID
значение ProductName
Тип продукта
Параметр
Я использую ODP.NET и C# для загрузки записей.
В настоящее время я могу загрузить все продукты, вызвав:
dbProvider.GetAllProducts();
Но это, очевидно, не очень хорошая идея для фильтрации продуктов, поэтому я создал метод для загрузки продуктов одним или несколькими способами: по списку ProductID, списку ProductName и/или Списку ProductTypes.
Это происходит потому, что конечный пользователь будет предоставлять список, который может быть либо
Список ProductIDs и/или список ProductNames и / или список ProductTypes.
Я хочу отфильтровать кэш, используя список ProductsIDs и/или список ProductNames и / или список ProductTypes.
Что я уже пробовал:
Поскольку я использую шаблон репозитория я расширил свой ProductsRepository для загрузки отфильтрованных продуктов:
IEnumerable<productdao> loadedProducts = dbProvider.GetFilteredProducts(List<int>ProductIDs, List<string>ProductNames, List<string>ProductTypes);
я начал писать код для кэширования, но у меня возникли проблемы с реализацией того, чего я хочу достичь.
//Get the default MemoryCache to cache objects in memory ObjectCache cache = MemoryCache.Default; CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinute(120.0); //check if data exists in cache //Get data from the database and cache them IEnumerable<product> loadedProducts dbProvider.GetFilteredProducts(List<int>ProductIDs, List<string>ProductNames, List<string>ProductTypes); ... //loop through them all and add to cache so user can access them in 3 ways //cache.Add("Product" + id, result, policy);
После того, как я кэшировал элементы, я хочу использовать его в своем классе ProductBusinessLogic для фильтрации кэша с использованием списка параметров, предоставленных Пользователем. Возможно ли это?
Как бы я проверил кэш на основе того, что предоставил пользователь, например, gList of ProductIds или List of ProductTypes или List of ProductNames.
Как бы я правильно хранил загруженные продукты из базы данных в кэш, зная, что пользователь может запросить доступ к данным на основе 3 конкретных способов?