呵呵,本人没有应用过缓存。Google了好多“.net 缓存”我在想当然的问些问题。比如一个查询对吧,服务器上缓存了一个对象Cache["Info"].如果是这样的话,所有的人都能公用这个对象了。但是如果我想每一类用户用一个缓存。比如说同一个部门的公用一个缓存。那该如何呢,我想是不是Insert这个Cache的时候,从Session里面带出他的DeptID加到他的key里面去形成这样一个
Cache["Info"+DeptID]这样的格式。但是如果这样的话呢,如果好多人不同的部门的话,那不是要创建好多缓存。很占资源的吧。(为什么有这样的需求呢,因为要通过DeptID来查询数据),在这种情况是不可以用缓存的吧。
我为什么会有这样的想法呢参考资料如下:  Cache myCache = new Cache();         myCache = HttpRuntime.Cache;         if (myCache[cache_name] != null)
        {
            ds = (DataSet)myCache[cache_name];
            if (ds.Tables[0].Rows.Count == 0)
            {
                //                
                ds = dbOperator.Get_DS(sql);                 myCache.Insert(cache_name, ds, scd);// Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(this.DataDiff));             }
            else
            {             }
        }
        else
        {
            ds = dbOperator.Get_DS(sql);
            myCache.Insert(cache_name, ds, scd);// Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(this.DataDiff));
            
        }
        if (Cache_Filter.Trim() != "")
        {
            ds.Tables[0].DefaultView.RowFilter = Cache_Filter;
        }
        return ds.Tables[0].DefaultView.ToTable();http://alek.blogbus.com/logs/8233564.html
--------------------------
这个是我在网上找的,因为他根本没有区别查询条件什么的。。-----------------------后来我又 查资料如下:缓存一个页面 
为缓存一个页面输出的内容,我们要在面面顶部指定一个 @OutputCache 命令。语法如下所示: <%@ OutputCache Duration=5 VaryByParam="None" %> 如你所见,这条指令有两个属性。他们是: Duration - 被缓存输出的内容有效期是多少秒。在时间超过指定的有效期后,过期的缓存内容会删除,并会在下次用户请求中重新调用页面生成缓存内容。再次的缓存内容过10秒后此过程又会重复。 
VaryByParam - 这个属性是必须的,并且指明查询字串参数不同使缓存产生变化。在上面的代码片断中,我们指定 VaryByParam 属性是 “None” ,这意味着不论传递的查询字串参数如何不同所返回的页面内容是相同的。 
如果对同一页面的两次请求含不同的查询字串参数,如:.../PageCachingByParam.aspx?id=12 和.../PageCachingByParam.aspx?id=15 ,这应该生成不同的页面内容,指令应该是: <%@ OutputCache Duration=10 VaryByParam="id" %> 对这样两种不同请求的页面内容每一个都会被缓存 Duration 属性指定的时间长度。。 为了指定多个参数的情形,要使用分号来分隔参数名称。如果我们指定 VaryByParam 属性为“*”,缓存内容会因传递的不同查询字串参数而不同。 
http://www.cnblogs.com/vinyfeng/articles/1501468.html
---- 这样两种说法怎么好像应用上有点不同。有区别,我有点糊涂。
因为我之前看了些很浅显的.net书上写了些Cache的概念。就是什么Cache["key"]得到一个对象。Insert插入一个对象,Remove删掉一个对象的什么应用上不知道怎么用。很是迷惑。希望有经验的帅哥可以帮我理清下思路,缓存的应用应该怎么用,可以给我链接查资料,也可以通俗的解释下,
我记得还看过一个什么标题“一个最懒程序员写的缓存”什么的,不过没这么看明白在哪应用。最好能理清他的应用,不要给他最基本的概念了。呵呵 小弟在此谢谢了。
祝大家身体健康,万事如意。

解决方案 »

  1.   

    http://book.csdn.net/bookfiles/650/10065020643.shtml
    参考2Cache.Remove("缓存标识"); //删除缓存       
    Cache.Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);//添加缓存
      

  2.   

    <%@ outputCache
    Duration="#ofseconds"
    Location="Any|Client|Downstream|Server|None"
    VaryByControl="ControlName"
    VaryByCustom="browser|customstring"
    VaryByHeader="headers"
    VaryByParam="Parametername" %>
    Cache.Insert(
    string key,
    object value,
    CacheDependency dependencies,//依赖,设置缓存有效的依赖性,比如设置和一个文件相关,文件一变,就失效
    DateTime absoluteExpireation,  //设置固定的过期时间
    TimeSpan slidingExpiration, //设置最后一次访问后多长时间过期
    CachePriority priority, //设置内存不足,缓存自动清除时,缓存的重要性,可不可以清除
    CacheItemRemovedCallback onRemoveCallback // 设置在清除时引发的事件
    )
    Cache.Insert("a",a,new Caching.CacheDependency(Server.MapPah(a.XML"),
    DateTime.Now.AddDays(1),Cache.NoSlidingExpiration,CacheItemPriority.High,
    new CacheItemRemovedCallback(this.RemovedCallback));
    清除就可以用Cache.Remove("key");方法
    if(Cache["DataList"]==null)
       {
         Cache.Insert("DataList",ds);
       }
       else
       {
         DataSet ds=(DataSet)Cache["DataList"];
       }
    参考
    还有数据库缓存
      

  3.   

    我们公司架构就用Cache["Info"+DeptID]这样的形式的。。
      

  4.   

    我也学习下 
    http://www.zainanbao.com
      

  5.   

    就是像你写的那样  每个部门key 不同就行了
      

  6.   


    Thank you .大家解释下,我上面两个例子的联系和区别吧。。什么是"缓存一个页面的输出内容"跟我们在内存中不去读数据库而直接获取对象返回到前台,有什么区别(也就是第二个列子你们会经常用吗?)
      

  7.   

    Cache是全局的,而@OutputCache是针对输出的HTML的。你可以把任何东西放到Cache里面,当然你也可以手动把页面输出的HTML存到Cache里面,但因为这种做法太常见了,所以就不需要你用C#代码做这样的事情了,写一句@OutputCache就可以。ASP.NET把这两者混合在一起,确实让很多新人分不清哪个是哪个。你就记住一个概念可以了——凡是重复计算的东西,你都可以把第一次计算的结果缓存下来。但因为一个系统里面重复计算的东西不少,读取数据库会重复操作,生成页面也会重复操作,在哪个层面做缓存才对特定的系统有帮助,这才是关键。