Cache缓存【ASP.NET】

Cache缓存


服务端的状态保持机制,空间换时间的一种技术,网站优化的第一个手段。

  • 将数据从数据库、文件取出来放在服务器的内存中,这样后面的用户来获取数据,不用查询数据库,直接从内存(缓存)中获取数据,提高了访问的速度,节省了时间,也减轻了数据库的压力

Cache的两个作用

  • 提高用户访问速度
  • 减轻数据库的压力

什么样的内容适合放在缓存中?

  • 经常被查询,但是不是经常改动的数据

Cache 和 Session 的区别

  • 每个用户都有自己单独的Session对象
  • 但是放在Cache中的数据是大家共享的

Cache基本用法

代码片段

protected void Page_Load(object sender, EventArgs e)
        {
            //判断缓存中是否有数据
            if (Cache["userInfoList"]==null)
            {
                BLL.UserInfoService UserInfoService = new BLL.UserInfoService();
                List<UserInfo> list = UserInfoService.GetList();
                //将数据放到缓存
                Cache["userInfoList"] = list;
                Response.Write("数据来自数据库!");
            }
            else
            {
                List<UserInfo> list = (List<UserInfo>)Cache["userInfo"];
                Response.Write("数据库来自缓存!");
            }
        }

CacheDependency

  • 缓存依赖:监视数据源,监视数据库,一旦发现数据改变,自动给缓存发送消息,通知缓存数据失效。

TimeSpan

  • 时间差:DateTime-DateTime=TimeSpan

CacheItemPriority

  • 缓存优先级,具有优先进入缓存的权利

//将对象插入Cache
                Cache.Insert("userInfoList",list,null,DateTime.Now.AddSeconds(5),TimeSpan.Zero,System.Web.Caching.CacheItemPriority.Normal, RemoveCache);
                Response.Write("数据来自数据库!");
             
                //Cache.Remove("userInfoList");//强制移除缓存
protected void RemoveCache(string key,object value,CacheItemRemovedReason reason)
        {
            if (reason==CacheItemRemovedReason.Expired)
            {
                //缓存移除的原因写到日志中
            }
        }

页面缓存
在这里插入图片描述

<%@OutputCache Duration="5" VaryByParam="*" %>
protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
        }

缓存依赖


文件缓存依赖

protected void Page_Load(object sender, EventArgs e)
        {
            string filePath = Request.MapPath("File.txt");
            if (Cache["fileContent"] == null)
            {
                //文件缓存依赖
                CacheDependency cDep = new CacheDependency(filePath);
                string fileContent = File.ReadAllText(filePath);
                Cache.Insert("fileContent", fileContent, cDep);
                Response.Write("数据来自文件");
            }
            else
            {
                Response.Write("数据来自缓存:" + Cache["fileContent"].ToString());
            }
        }

数据库缓存依赖

 public partial class SqlCacheDep : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Cache["customerList"] == null)
            {
                SqlCacheDependency cDep = new SqlCacheDependency("GSSMS", "Customer");

                string sql = "select * from Customer";
                DataTable da =SqlHelper.GetDataTable(sql, CommandType.Text);
                Cache.Insert("customerList", da, cDep);
                Response.Write("数据来自数据库");
            }
            else
            {
                Response.Write("数据来自缓存");
            }
        }
    }
发布了178 篇原创文章 · 获赞 178 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/luckystar_99/article/details/88671108