Asp.net MVC学习日记十六(数据Cache)

1、新建Models/Product.cs

  public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
    }

2、新建Models/ProductService.cs

  public class ProductService
    {
        public List<Product> GetProducts()
        {
            List<Product> result = Builder<Product>
            .CreateListOfSize(100)
            .Build()
            .ToList();
            return result;
        }
    }

3、Models/CacheWrapper.cs

public class CacheWrapper
    {
        public void PutProducts(List<Product> products)
        {
            Dictionary<string, object> itemsToCache = new Dictionary<string, object>();
            foreach (Product product in products)
            {
                itemsToCache.Add(product.Name, product);
            }
            AddCacheItems(itemsToCache);
        }
        public List<Product> GetProducts(string[] productNames)
        {
            List<Product> results = new List<Product>();
            List<object> cacheItems = GetCacheItems(productNames);
            foreach (object cacheItem in cacheItems)
            {
                results.Add(cacheItem as Product);
            }
            return results.OrderBy(p => p.Name).ToList();
        }

 

        private List<object> GetCacheItems(string[] keys)
        {
            IDictionaryEnumerator theCache = HttpContext.Current.Cache.GetEnumerator();
            List<object> results = new List<object>();
            while (theCache.MoveNext())
            {
                if (keys.Contains(theCache.Key))
                    results.Add(theCache.Value);
            }
            return results;
        }
        private object GetCachItem(string key)
        {
            if (HttpContext.Current.Cache[key] != null)
                return HttpContext.Current.Cache[key];
            return null;
        }
        private void AddCacheItems(Dictionary<string, object> items)
        {
            foreach (KeyValuePair<string, object> item in items)
            {
                AddCacheItem(item.Key, item.Value);
            }
        }
        private void AddCacheItem(string key, object item)
        {
            HttpContext.Current.Cache.Add(key, item, null, //dependencies
            DateTime.MaxValue, //absolute expiration
            new TimeSpan(0, 0, 2, 0), //sliding expiration
            CacheItemPriority.Default, //priority
            null); //callback
        }
    }

 

4、Global.asax

     protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);

            PreLoadProductCatalog();
        }


        private void PreLoadProductCatalog()
        {
            List<Product> products = new ProductService().GetProducts();
            new CacheWrapper().PutProducts(products);
        }

 

5、Controllers/HomeController.cs

  public ActionResult CachedProducts()
        {
            List<Product> products = new CacheWrapper().GetProducts(new[] {"Name1", "Name5", "Name98", "Name39", "Name88", "Name34"});
            return View(products);
        }

6、添加CachedProducts的强类型视图,且视图内容为List

 

ok啦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leesmn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值