是部分做cache还是整个页面做cache?
部分做cache要指定cache的key为动态的,如<cache:cache key="<%=page%> >
如果是整个页面cache会根据URL做key

解决方案 »

  1.   

    关于oscache有几个疑惑:
    1)oscache只是把JSP做缓存,当遇到相同key的标签代码从缓存读取显示,
    并不能减少后台的数据库访问(次数),只不过页面看起来快;
    2)默认oscache是放到内存里,当有多个用户访问的这样会不会增加内存?
       这与直接session存放对象有什么区别?
      

  2.   

    简单的页面可以对整个页面cache,通常建议部分cache。只cache那些需要根据条件动态生成内容的部分。1。///并不能减少后台的数据库访问(次数)你自己到底观察过程序的执行没有???
    只要执行一次生成缓存之后,在缓存有效期内,
    基本都是直接从缓存里读出的纯文本,压根就没访问数据库了。什么叫页面看起来快?缓存后的页面已经几乎等同于静态文本文件了。
    2.需要缓存的内容根据实际情况需要来设置scope,比如论坛的帖子列表,缓存到application的scope就可以了。如果都缓存到session里,那当然会大量消耗内存了。
      

  3.   

    cache只针对动态生成的内容,比如一个组织机构列表
    省公司登录的时候显示省公司以及各下属分公司机构;
    分公司登录的时候显示分公司以及分公司下属机构;
    1)<cache:cache key="<%=organ_id%> scope="session" >
    //获得数据库组织机构列表
    </cache:cache>
    当在另一个页面也使用相同的列表时候,同样也可以用
    2)<cache:cache key="<%=organ_id%> scope="session" >
    //获得数据库组织机构列表
    </cache:cache>在2)处可以不写访问数据库获得组织机构代码,它可以直接从缓存里读取出页面脚本
    但就如你说的“在缓存有效期内”我不能设置这个缓存时间过长,又不能太短,我又不知道
    用户会访问多久,否则缓冲失效,界面应该会报错吧,所以我还是要在2)处写访问数据库代码
      

  4.   

    当然scope="session"可以保证页面的有效性,但因为我无法知道用户先点击1页面呢,还是先点击2)页面,所以我还是的写这部分代码啊,除非我能先获得这个缓冲对象,判断是否存在,如果存在就不访问数据库。
      

  5.   

    楼上的,一般用了oscache,都不会是scope="session",试想,一个用户浏览之前自己浏览过的页面的机率有多少呢?而且每个新的用户游览新的页面,都要重新cache,光是生成cache和销毁cache这个过程,就十分消耗系统时间了。
      

  6.   

    那要看什么系统啊!!做Portal与MIS是不一样的!protal针对大部分的用户是一样的界面
    所以你可以使用scope="application",但是对于MIS来说,大部分的用户的权限是不一样的,
    看到的数据也是不一样的!况且对于Model2来说,后台访问数据库都是在Bean里,你不能
    决定什么时候不访问数据库(就如上面我举的例子),而用scope="session"的实际意义并不大,
    否则和直接session存放对象有什么区别?!所以我在想适合oscache的应用场景。
      

  7.   

    to: wzrlover(无语无声无欲无泪吾独行!) 
      你没有理会到cache真正的用法。
      做mis系统也好 坐网站也好。
      cache不是什么地方都可以使用。
      要是:访问量高,变化量小的数据。比如:用户管理,组织机构,权限等这些访问量大的,还有比如mis里面的通知,公告的前20条记录,论坛里面的前5页这些都可以。
      做mis系统的时候一般不是做页面缓存,而是更多的作数据缓存。分清楚你的系统的瓶颈 再相对的使用cache才行啊。