请问怎么把HashTable缓存?

gwg2368 2007-08-14 09:26:38
如题,
HashTable中的内容从数据库(sql server 2005)获得,记录有1000行左右。
此页面访问比较频繁,大概1分钟有1000次。
因此想缓存HashTable。

另外,数据库方面,如果想在数据库的内容有了变动就立马通知web刷新缓存,又该如何?

谢谢!
...全文
487 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
gwg2368 2007-08-14
  • 打赏
  • 举报
回复
Cache.Add 中的第三个参数
System.Web.Caching.CacheDependency,我该怎么赋值,它的值是什么意思?
ReyZhang 2007-08-14
  • 打赏
  • 举报
回复
看来只能用SqlCacheDependency啦.sql缓存依赖.pet shop 4.0中有实例
gwg2368 2007-08-14
  • 打赏
  • 举报
回复
我问一下楼上WO_YOU_XIE_SHANG_XIN() ,用HashTable跟DataTable是一样的用法吗?

地下室小红叔 2007-08-14
  • 打赏
  • 举报
回复
以上是2003的 如果在.net 2005里用法有些区别
地下室小红叔 2007-08-14
  • 打赏
  • 举报
回复
引用
using System.Web.Caching
最简单的用法
DataTable dt=new DataTable(); //初始化

if (Cache["keyName"]==null)
{
dt=GetData(); //取数据
Cache.Add("keyName",dt,System.DateTime.MaxValue,System.TimeSpan.MaxValue,CacheItemPriority.High,null);
}
else
{
dt=(DataTable)Cache["keyName"];
}
添加缓存时的各个参数的含义根据提示理解吧
路人乙e 2007-08-14
  • 打赏
  • 举报
回复
想实现缓存,用Application也可
更新数据没有太完美的方法,
可在初次请求页面时判断数据库中的记录条数是非和hashtable中的记录条数相等
foyuan 2007-08-14
  • 打赏
  • 举报
回复
用Sql缓存依赖

网上很多教程
Jinglecat 2007-08-14
  • 打赏
  • 举报
回复
使用 SqlCacheDependency 类在 ASP.NET 中缓存


ASP.NET 允许您使用 SqlCacheDependency 类创建依赖于数据库中表或行的缓存项。当表中或特定行中发生更改时,带有依赖项的项便会失效,并会从缓存中移除。可以在 Microsoft SQL Server 7.0、SQL Server 2000 和 SQL Server 2005 中设置表的依赖项。如果您使用 SQL Server 2005,还可以设置特定记录的依赖项。

在某些方案中,使用带有 SQL 依赖项的缓存可显著提高应用程序的性能。例如,假定您正在构建一个从数据库显示产品信息的电子商务应用程序。如果不进行缓存,则每当用户要查看产品时,应用程序都必须从数据库请求数据。您可以在某一时刻将产品信息缓存一天,由于产品信息已经在内存中,因此可确保较快的响应时间,但是,当产品信息发生变化时,缓存的产品信息就会失去与数据库中数据的同步,且不同步的时间最长可达一天。

使用 SQL 缓存依赖项可以缓存产品信息,并创建一个数据库表或行更改的依赖项。当且仅当数据更改时,基于该数据的缓存项便会失效并会从缓存中移除。下次从缓存中请求该项时,如果该项不在缓存中,便可以再次向缓存中添加更新后的版本,并且可确保具有最新的数据。

SQL 缓存依赖项还可用于页输出缓存。例如,可以创建一个名为 ViewProduct.aspx 的页,用于显示有关特定产品的信息。可以将该页的缓存策略设置为 SQL 依赖项,就如为手动添加到缓存中的项所设置的依赖项一样。该页便会一直存储在缓存中,直至所依赖的表或行发生更改为止。当数据发生更改时,便会重新创建页,并将新创建的页再次存储在输出缓存中。

http://msdn2.microsoft.com/zh-cn/library/ms178604(VS.80).aspx
awen177 2007-08-14
  • 打赏
  • 举报
回复
ding
freeboy827 2007-08-14
  • 打赏
  • 举报
回复
petshop里面有吧,缓存依赖
haonanernet 2007-08-14
  • 打赏
  • 举报
回复
HashTable 本身就具有缓存功能
可爱的排骨 2007-08-14
  • 打赏
  • 举报
回复
Hashtable用静态的.
数据库主动通知应用程序不太方便. 可以给每个更新数据库的方法加上一个特性,此特性会提示Hashtable取新数据. 也可以建一个新表, 记录每个表或其关联的视图的更新时间, 每次访问数据库比对更新时间以确定是否要取新数据更新Hashtable
Jinglecat 2007-08-14
  • 打赏
  • 举报
回复
// inert
HttpContext.Current.Cache.Insert("MyCacheKey", MyHashTable);

// retrieve

Hashtable MyHashTable = HttpContext.Current.Cache["MyCacheKey"] as Hashtable;
if(MyHashTable != null) {
// ...
}

jimmy409954 2007-08-14
  • 打赏
  • 举报
回复
在BLL层可用一表态的HastTable保存你要数据,当你对数据库添加、修改、删除时再重新把数据加载到HastTable里就行了,如果看过设计模式方面的书,应该会了解单态模式,这种方法与单态模式很像。
jeremy 2007-08-14
  • 打赏
  • 举报
回复
好高深,帮顶!

62,046

社区成员

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

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

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

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