关于缓存的问题

lunhuifengzheng 2010-03-31 11:25:52
请问 HttpRuntime.Cache.Insert(cacheKey, ds, dependency,?, ?);
后面两个参数应如何写才可数据库变动时,及时响应到程序中的缓存的更新,而且在用户连续操作时,缓存不释放,不连续操作时,则释放缓存。是否与这有关。如果不是,请教方法。谢谢!如下是我的代码,请教应如何修改,谢谢。忘了说我在SQL2008也开启了service broker。

//DAL.CacheData.cs
namespace DAL
{
public class CacheData
{

private string _source;
///<summary>
///指示数据从何而来
///</summary>
public string Source
{
set { _source = value; }
get { return _source; } }

public CacheData()
{

_source = "未知类型";
}


///<summary>
///从缓存中获取数据
///</summary>
public DataSet GetDataFromCache()
{


string cacheKey = ConfigurationManager.AppSettings["TCM_sys_user"].ToString();
string connString = ConfigurationManager.ConnectionStrings["TCM"].ConnectionString;
//SqlCacheDependencyAdmin.EnableNotifications(connString);
if (HttpRuntime.Cache[cacheKey] != null)
{ _source = "从缓存中取得";
return (DataSet)HttpRuntime.Cache[cacheKey];

}
else
{
SqlDependency.Start(connString);
DataSet ds = new DataSet();


string sqlGetAllUser = "select * from sys_user";
using (SqlConnection conn = new SqlConnection(connString))
{ //SqlDataAdapter da = new SqlDataAdapter(cmd);
// DataSet ds = new DataSet();
// da.Fill(ds);
// DataView dv = ds.Tables[0].DefaultView;
using (SqlCommand cmd = new SqlCommand(sqlGetAllUser, conn))
{
SqlCacheDependency dependency = new SqlCacheDependency(cmd);
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
//SqlDependency.Start(connString);
da.Fill(ds);
}

HttpRuntime.Cache.Insert(cacheKey, ds, dependency,DateTime.Now.AddMinutes(30), TimeSpan.Zero);



}

}
_source = "从表中取得";
return ds;

}
}



}
}


//sqlcachedependency.sqldependency.aspx
namespace sqlcachedependency
{
public partial class sqldependency : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

DAL.CacheData cacheData = new DAL.CacheData();
gvShowUser.DataSource = cacheData.GetDataFromCache();
gvShowUser.DataBind();
lbl_source.Text = cacheData.Source;
HyperLink1.NavigateUrl = "index.aspx";
}
}
}


//sqlcachedependency.Global.asax
namespace sqlcachedependency
{
public class Global : System.Web.HttpApplication
{

protected void Application_Start(object sender, EventArgs e)
{
string connString = ConfigurationManager.ConnectionStrings["TCM"].ConnectionString;
SqlDependency.Start(connString);
}

protected void Session_Start(object sender, EventArgs e)
{

}

protected void Application_BeginRequest(object sender, EventArgs e)
{

}

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{

}

protected void Application_Error(object sender, EventArgs e)
{

}

protected void Session_End(object sender, EventArgs e)
{

}

protected void Application_End(object sender, EventArgs e)
{

string connString = ConfigurationManager.ConnectionStrings["TCM"].ConnectionString;
SqlDependency.Stop(connString);
}
}
}
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lunhuifengzheng 2010-04-01
  • 打赏
  • 举报
回复
求救求救,UPUP,难道用sqlcachedependency这种方式的人这么少吗?
lunhuifengzheng 2010-04-01
  • 打赏
  • 举报
回复
sqlcachedependency是否可支持数据库只要一修改,缓存马上就过期,如果能,该如何改我以上的代码呢。
网上所说的大都是2000用轮询来做到,那么用sqlcachedependency应如何实现,求救求救
lunhuifengzheng 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jelly_tracy 的回复:]
问问百度
[/Quote]
查了百度查不到我想要的这种方法,逼不得已只好在此求教
Jelly_tracy 2010-04-01
  • 打赏
  • 举报
回复
问问百度
liyoubaidu 2010-04-01
  • 打赏
  • 举报
回复
顶一下

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧