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("数据来自缓存");
}
}
}