使用OSCache优化性能,及JPA二级缓存

1.使用静态化页面技术:

要统计产品的浏览次数:

在<body>

  <img src="http://www.site.com/data/count.do?productId=50" height=0 width=0><!--将productId=50传给count action;尽量使用该方法-->

</body>

<body onload="$get("http://www.site.com/data/count.do",{productId=50})">

  <!--还可以用ajax,但若用户禁用js该方法即不起作用了-->

</body>

2.缓存技术:数据更新频率比较快,几秒更新一次,或需要实时反映数据的变化,或该页面具有很多种风格,不便于生成静态页面

3.OSCache如何实现页面缓存:

下载OSCache:opensymphony.com/oscache/

commons-logging.jar(在spring、hibernate框架里都有),若是SSH框架就不用加该包了;

oscache.jar:将下载的包解压,etc文件夹里的oscache.properties放在WEB-INF/classes下;开发阶段放在src目录下即可;

页面缓存:

页面局部缓存:缓存页面的某个栏块的HTML源代码;

4.OSCache如何实现页面局部缓存:

实现页面局部缓存:只需学会一个标签即可;

<%@taglib url="www.opensymphony.com/oscache/" profix="oscache"%><!--标签库-->

<oscache:cache key="" scope="默认是application">

  <%=new Date()%><!--缓存的是往客户端输出的代码;没使用缓存情况下,每刷新一次就会更新一次-->

</oscache:cache>

原理:map.put(key,value);

key: url 即请求的路径

value:被缓存的标签里的内容

默认存放在application范围缓存:被所有用户都可以访问,共享application范围缓存;产品列表缓存

存放在session缓存:只针对某个用户缓存它的内容;缓存属于某一个用户的数据时;重新打开一个浏览器,就会重新创建一个session;

缓存默认的有效期:3600s即一个小时;

若更改缓存时间:属性time="",单位是s; 缓存若超时,缓存内容过期,oscache就会把缓存清除掉,即会重新建立缓存;

属性refresh=”true“:还没到时间过期时,强行让它过期;每刷新一次就会改变一次

属性refresh=”${param.refresh}“:强行清除缓存;

若多个jsp页面都使用局部缓存,现在需要所有jsp页面的属于application范围的局部缓存都清理掉:用该标签<oscache:flush scope="application"/>

<oscache:flush scope="session" key="foobar"/>:清除session范围内的key为foobar的缓存;

<oscache:flush scope="application" group="currencyData"/>:清除application范围内的组名为currencyData内的所有缓存;

5.OSCache如何实现页面全局缓存:

页面全局缓存:缓存整个页面的HTML源代码;

配置一个过滤器即可实现:过滤器会把服务器执行过后的往客户端输出的HTML代码缓存起来;

在web.xml的最前面:因为如果用户请求某一个路径,若发现该路径对应的缓存存在,就可以把这份缓存直接返回用户浏览器;无需执行后面的filter和操作

<filter>

  <filter-name>CacheFilter</filter-name>

  <filter-class>com.opensymphony.oscache.filter.CacheFilter</filter-class>

  <init-param>

    <param-name>time</param-name>

    <param-value>7200</param-value><!--缓存时间为两个小时-->

  </init-param>

  

  <init-param>

    <param-name>scope</param-name>

    <param-value>application</param-value><!--产品列表页面;application范围的缓存-->

  </init-param>

</filter>

<filter-mapping>

  <filter-name>CacheFilter</filter-name>

  <url-pattern>/product/list/*</filter-pattern><!--对产品列表页面进行过滤;对哪些路径的页面进行过滤;对/product/list开头的路径进行缓存-->

</filter-mapping>

清除缓存:属于application范围的缓存都清理掉:用该标签<oscache:flush scope="application"/>

6.OSCache可缓存领域对象:

原文地址:https://www.cnblogs.com/sunruntheway/p/4275729.html