asp.net C#中关于服务器缓存和客户端缓存问题

dys_198102 2008-10-30 05:03:41
ASP.NET c#问题,
怎样理解服务器缓存和客户端缓存?
   在什么样的情况用服务器缓存和客户端缓存?
   服务器缓存和客户端缓存又具体应怎样写?
...全文
958 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bebetoo123 2012-08-24
  • 打赏
  • 举报
回复
说实话我怎么觉得回答木有一个真正回答到点子上?
 服务器缓存和客户端缓存又具体应怎样写?
lovehongyun 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dys_198102 的回复:]
如果是新闻发布系统用哪种缓存好哪???
[/Quote]
不是说用哪种好.而是要结合和适当的应用
dys_198102 2008-10-31
  • 打赏
  • 举报
回复
如果是新闻发布系统用哪种缓存好哪???
evjen 2008-10-30
  • 打赏
  • 举报
回复
缓存的用法总结:
1.要提高性能,应该首先想到缓存
2.尽早缓存;经常缓存
3.向数据层、业务逻辑层、UI层添加缓存

从基础开始吧

页面缓存
缓存指令
<%@ outputcache duration="60" varybyparam=“none" %>
duration(必须)
当前页面缓存60秒
varybyparam(必须)
get串对应的字段,缓存输出的结果因查询字符串而异
CacheProfile
根据配置文件关联缓存
SqlCacheDependency
数据表关联缓存


根据配置文件缓存
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="AppCache1" enabled="true" duration="60"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>

<%@ OutputCache CacheProfile="AppCache1" VaryByParam="none" %>

片段缓存
在用户控件的页面上输入指令
<%@ OutputCache Duration="120" VaryByParam="None" %>

<%@ OutputCache Duration="30" VaryByControl="Button1" %>


Substitution
<%@ outputcache Duration="60" VaryByParam="none" %>
<%=DateTime.Now.ToString() %>

<asp:Substitution ID="Substitution1" MethodName="GetDate" runat="server" />

public static string GetDate(HttpContext context)
{
return DateTime.Now.ToString();
}


缓存API
Cache, System.Web.Caching;
向缓存添加/移除项
Cache["MyData1"] = "Cached Item 1";
Cache.Remove("MyData1");
添加缓存时间
cache.insert("key", data, null, datetime.now.addminutes(1), timespan.zero);
清除页面缓存
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetNoStore();
Response.AppendHeader("pragma", "no-cache");
缓存依赖
CacheDependency sd =
new CacheDependency(Server.MapPath("1.log"));

Cache.Add("key1", "1111", sd, DateTime.Now.AddSeconds(11), TimeSpan.Zero, CacheItemPriority.Default, null)
缓存回调
cache.insert("key",myfile,null, cache.noabsoluteexpiration,  timespan.zero, cacheitempriority.default, new cacheitemremovedcallback (onremove); );

public static void onremove(string key, object cacheitem,  cacheitemremovedreason reason)
{
outKey = key;
outReason = reason.ToString(); 
}

缓存DataTable
public datatable getcustomers(bool bypasscache) {
 string cachekey = “customersdatatable”;  
object cacheitem = cache[cachekey] as datatable;  
if((bypasscache) || (cacheitem == null)) {   
cacheitem = getcustomersfromdatasource();    cache.insert(cachekey, cacheitem, null,   datetime.now.addseconds(getcachesecondsfromconfig(cachekey), timespan.zero);  
}  
return (datatable)cacheitem;
}
mengxj85 2008-10-30
  • 打赏
  • 举报
回复
学习
ppp7p 2008-10-30
  • 打赏
  • 举报
回复
楼上很强大。
ytycoffe 2008-10-30
  • 打赏
  • 举报
回复
另外服务器缓存是针对多用户同时请求同一页面或数据的情况

客户端缓存是针对同一用户多次访问相同页面或数据的情况。

活用缓存可以对网站的访问速度有很大的提升,尤其是访问量大的时候
lovehongyun 2008-10-30
  • 打赏
  • 举报
回复
ytycoffe 2008-10-30
  • 打赏
  • 举报
回复
服务器缓存是把数据放在服务器的内存中,客户端缓存则是把数据保存在浏览器里。

服务器上某一页面访问量较大,且是经常变动的话,用服务器缓存比较合适,这样访止同一时间造上数据库连接次数过多的情况。

如果服务器上某一页面访问量较大,但是内容一直不变,或者非常长时间才变动的话,可以用客户端缓存,也可以用服务器端缓存。

服务器缓存不要滥用,要根据具体情况来使用,不然不但起不到提高效率的作用,反而比不使用缓存更糟糕。
客户端缓存滥用会导致用户长时间浏览的一直是固定不变的页面

具体的用法
服务器端:
ASP.NET 有三种可由 Web 应用程序使用的缓存:
1.输出缓存:缓存请求所生成的动态响应.
2.片断缓存:缓存请求所生成的相应的各部分.
3.数据缓存:以编程方式混存任意对象.

输出缓存:(缓存绝对过期)
通过缓存从动态页生成的内容来提高请求/响应的吞吐量.默认情况下启用输出缓存,
但不缓存来自任何响应的输出,除非采取显式操作使该响应成为可缓存的.
若要使相应满足输出缓存的条件,它必须具有有效的过期/有效性策略和公共的缓存可
见性.启用输出缓存后,当发出对页的第一个GET请求时创建一个输出缓存项。随后的GET或
HEAD请求由该输出缓存项服务,直到该缓存请求过期。
下面的指令在响应时激活输出缓存:
<%@ OutputCache Duration="60" VaryByParam="none"%>

页片断缓存:(单独缓存)
<%@ OutputCache Duration="120" VaryByParam="id1;id2"%>
VaryByParam属性功能非常强大,允许用户控件作者指示asp.net在服务器上缓存/存储
输出缓存区域的多个实例。
片断缓存还支持VaryByControl属性。VaryByParam属性基于使用POST或GET发送的名称
/值对改变缓存结果,而VaryByControl属性则通过用户控件中的控件改变缓存片断。

页数据缓存:
把数据项放入缓存:
Cache["mykey"]=myValue;
从缓存中检索数据:
myValue=Cache["mykey"];
if(myCache !=null)
{
DisplayData(myValue);
}


客户端缓存:

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser" %>
qinhl99 2008-10-30
  • 打赏
  • 举报
回复
http://blog.csdn.net/xiaoxiaohai123/archive/2008/04/24/2324128.aspx
qinhl99 2008-10-30
  • 打赏
  • 举报
回复
http://blog.csdn.net/octverve/archive/2008/01/31/2075402.aspx
qinhl99 2008-10-30
  • 打赏
  • 举报
回复
sf

62,046

社区成员

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

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

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

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