关于Asp.Net缓存的疑问

liyj19870228 2010-01-05 09:40:13
我记得asp。net默认情况下数据操作后会留有缓存,我主要有这么几个疑问

1.缓存是否有保存时间设置,默认多少?可以设置的话如何设置?
2.比如我从数据库读取一批数据,绑定到前台后,我还能利用从缓存中读取数据吗?如果可以 我该怎么写代码读取?
...全文
179 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
GS1T74wjwpg 2010-01-13
  • 打赏
  • 举报
回复
缓存技术的基本原理是把访问频繁的数据以及需要大量处理时间来创建的数据存储在内存中,当用户请求这些数据时,系统直接将内存中的数据返回给用户,大大提高程序的性能...

asp.net推出了以下几种缓存技术
1.整页缓存
例如要访问一个明星的信息页面(基本数据都是固定的),我们将整个页面缓存起来,当我们调用时直接从内存中读取...
2.页面部分缓存
与第一种比较讲局部页面缓存一下,需要更新的地方不缓存
3.应用程序缓存
就是将数据缓存起来,例如一个用户信息的集合
ouc_ajax 2010-01-13
  • 打赏
  • 举报
回复
1.缓存是否有保存时间设置,默认多少?可以设置的话如何设置?
2.比如我从数据库读取一批数据,绑定到前台后,我还能利用从缓存中读取数据吗?如果可以 我该怎么写代码读取?

System.Web.Caching提供了Cache类,每个页面都有一个想关联的Cache,代码中直接使用就行了
例如查询出来DataTable,我们可以Cache.Insert(key, dt , dep, DateTime.Now.AddSeconds((double) (Factor*seconds)), TimeSpan.Zero, priority, null); priority:优先级。 double:缓存时间
这样下次就可以取了。DataTable dt = Cache[key] as DataTable
而且我们如果知道了这个表肯定有缓存,那么在对表维护的操作里边加上清除缓存。Cache. Remove(key)
这样就不会有脏数据了。不过Cache最好的是获取配置文件的时候,因此Cache可以绑定文件的Dependency.
配置文件修改,Cache自动清空。不用我们维护脏数据清理

liyj19870228 2010-01-13
  • 打赏
  • 举报
回复
还是有点模糊
church88 2010-01-08
  • 打赏
  • 举报
回复
个人认为如果是经常要改变的数据不宜放在缓存中,就像SP1234说的那样这种操作会造成巨大的内存“抖动”。
liyj19870228 2010-01-07
  • 打赏
  • 举报
回复
哎。。。。
Specialaspnet 2010-01-06
  • 打赏
  • 举报
回复
我也是...学习..
liyj19870228 2010-01-06
  • 打赏
  • 举报
回复
还是对缓存充满疑惑。。。
  • 打赏
  • 举报
回复
......
}
  • 打赏
  • 举报
回复
一个使用SQL Server的BLL层数据缓存可能这样设计:

public static class BLL
{

public static List<Group> 查询多个用户共同参与过活动的项目组(List<User> users)
{
string userNames = 获取用户名列表(users);
string key = userNames + "共同参与过活动的项目组";
var cache = HttpRuntime.Cache;
var result = (List<Group>)cache[key];
if(result==null)
{
result = 查询数据库多个用户共同参与过活动的项目组(users);
cache.Insert(key,result,一个SqlCacheDependency或者多个组成一个AggregateCacheDependency);
}
return result;
}
  • 打赏
  • 举报
回复
告诉你两个对缓存的极端歪曲的“流行”说法:

第一,说缓存就是时间控制的。

第二,说缓存是一堆等着访问的数据。



缓存如果是“脏”的,那么用时间控制它有什么用处?几乎所有根本不懂缓存但是急于赶时髦的人都以为缓存失效就是时间控制到期,因为它的技术能力根本不能为缓存数据是否“脏”来负责。我可以告诉你,时间控制向来都是给缓存一个生存期的“上限”,而缓存必须在变成(以及可能变成)脏数据的瞬间尽快清除掉,这才是缓存控制的基本技术。因此,不仅仅是时间的Dependency,还有各种Dependency技术才是缓存设计的基础,学到一点技术难点才算学到了技术。

有些人一下子读取一个数据表放到内存里,根本不管这些数据是否每一个都经常被访问到。这种方式纯粹是滥用缓存。如果要准确地设计缓存依赖,那么这种操作就会造成巨大的内存“抖动”,可见这种设计也往往跟那种认为缓存依赖技术只是时间控制的人设计出来的缓存功能相伴。如果你考虑到需要保证缓存数据必须不是脏数据,保证只有经常读的数据才应该缓存,那么每一个缓存单元可能只是对应单个记录,或者某一个常被BLL层调用的分页查询SQL语句的结果记录集。
seesea125 2010-01-06
  • 打赏
  • 举报
回复
1 我记得asp。net默认情况下数据操作后会留有缓存

2.比如我从数据库读取一批数据,绑定到前台后,我还能利用从缓存中读取数据吗?如果可以 我该怎么写代码读取?

默认没有的?数据操作后,sql server倒是把运行结果放入内存中,等待下次调用
spring20130808 2010-01-06
  • 打赏
  • 举报
回复
up
liyj19870228 2010-01-06
  • 打赏
  • 举报
回复
没人知道吗
newlight527 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhjhzf 的回复:]
只要有缓存的地方 就有sp1234
[/Quote]

是这样~
ycproc 2010-01-06
  • 打赏
  • 举报
回复
up


要说的上面已经说了

缓存肯定是要设置时间的

比如加载排行榜 等等的数据时候
每周更新

你不设置时间 怎么办呢
呵呵
很简单的设置的

百度一下吧
newdigitime 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 liyj19870228 的回复:]
我记得asp。net默认情况下数据操作后会留有缓存,我主要有这么几个疑问

1.缓存是否有保存时间设置,默认多少?可以设置的话如何设置?
2.比如我从数据库读取一批数据,绑定到前台后,我还能利用从缓存中读取数据吗?如果可以 我该怎么写代码读取?
[/Quote]

你说的这些都是基于数据库本身的缓存机制吧.
如果开启了缓存,第二次执行同样的数据库操作命令时,数据库会自动从缓存中读取相关数据,而不用从库中查询.当然前提是此缓存还没被回收.

asp.net用的更多的是页面outputcache.

此外IIS本身也具备缓存机制.
zhjhzf 2010-01-06
  • 打赏
  • 举报
回复
只要有缓存的地方 就有sp1234
wowstsm 2010-01-06
  • 打赏
  • 举报
回复
mark
杨溪有炘鑫 2010-01-06
  • 打赏
  • 举报
回复
期盼对缓存更详细的讲解。看了sp1234 的回帖感觉确实茅塞顿开。
liyj19870228 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sp1234 的回复:]
......
}
[/Quote]

sp1234 能在详细的解释一下么?
加载更多回复(1)

62,254

社区成员

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

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

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

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