用过oscache的请进来

时间:2021-01-26 04:52:20
我刚刚在项目中用上了oscache,感觉非常好,但是遇到一个问题,例如有一个JSP页面是分页显示的,是通过页面URL传一个page=1,page=2这样的参数到本页来实现,这样的话,OSCACHE就有不足的地方了,因为由于JSP文件是同一个,只是带的参数不同,所以无论是翻到第几页,都是显示第一页的内容,请问有没有人遇到这个问题呢? 你们是怎么解决的,或者有没有另外一种CACHE来解决这个问题?



8 个解决方案

#1


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

#2


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

#3


简单的页面可以对整个页面cache,通常建议部分cache。只cache那些需要根据条件动态生成内容的部分。

1。///并不能减少后台的数据库访问(次数)

你自己到底观察过程序的执行没有???
只要执行一次生成缓存之后,在缓存有效期内,
基本都是直接从缓存里读出的纯文本,压根就没访问数据库了。

什么叫页面看起来快?缓存后的页面已经几乎等同于静态文本文件了。


2.需要缓存的内容根据实际情况需要来设置scope,比如论坛的帖子列表,缓存到application的scope就可以了。如果都缓存到session里,那当然会大量消耗内存了。



#4


cache只针对动态生成的内容,比如一个组织机构列表
省公司登录的时候显示省公司以及各下属分公司机构;
分公司登录的时候显示分公司以及分公司下属机构;
1)<cache:cache key="<%=organ_id%> scope="session" >
//获得数据库组织机构列表
</cache:cache>
当在另一个页面也使用相同的列表时候,同样也可以用
2)<cache:cache key="<%=organ_id%> scope="session" >
//获得数据库组织机构列表
</cache:cache>

在2)处可以不写访问数据库获得组织机构代码,它可以直接从缓存里读取出页面脚本
但就如你说的“在缓存有效期内”我不能设置这个缓存时间过长,又不能太短,我又不知道
用户会访问多久,否则缓冲失效,界面应该会报错吧,所以我还是要在2)处写访问数据库代码


#5


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

#6


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

#7


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

#8


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

#1


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

#2


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

#3


简单的页面可以对整个页面cache,通常建议部分cache。只cache那些需要根据条件动态生成内容的部分。

1。///并不能减少后台的数据库访问(次数)

你自己到底观察过程序的执行没有???
只要执行一次生成缓存之后,在缓存有效期内,
基本都是直接从缓存里读出的纯文本,压根就没访问数据库了。

什么叫页面看起来快?缓存后的页面已经几乎等同于静态文本文件了。


2.需要缓存的内容根据实际情况需要来设置scope,比如论坛的帖子列表,缓存到application的scope就可以了。如果都缓存到session里,那当然会大量消耗内存了。



#4


cache只针对动态生成的内容,比如一个组织机构列表
省公司登录的时候显示省公司以及各下属分公司机构;
分公司登录的时候显示分公司以及分公司下属机构;
1)<cache:cache key="<%=organ_id%> scope="session" >
//获得数据库组织机构列表
</cache:cache>
当在另一个页面也使用相同的列表时候,同样也可以用
2)<cache:cache key="<%=organ_id%> scope="session" >
//获得数据库组织机构列表
</cache:cache>

在2)处可以不写访问数据库获得组织机构代码,它可以直接从缓存里读取出页面脚本
但就如你说的“在缓存有效期内”我不能设置这个缓存时间过长,又不能太短,我又不知道
用户会访问多久,否则缓冲失效,界面应该会报错吧,所以我还是要在2)处写访问数据库代码


#5


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

#6


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

#7


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

#8


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