• OScached页面缓存知识总结一


    OSCache页面缓存

    什么是OSCache?
    OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。
     
    使用OSCache需要的jar
    下载路径:http://www.opensymphony.com/oscache/
    oscache.jar
    libcommons-logging.jar
     
    配置步骤:
    第一步:把上述两个jar文件放置在WEB-INF/lib目录下.
    第二步:把oscache安装目录下的/etc/oscache.properties 文件放入 /WEB-INF/classes目录.开发阶段,我们可以把该文件放置在src目录
     
    使用Oscache的标签<oscache></oscache>来进行页面的局部缓存.使用方法如下:
    <%@taglib uri="http://www.opensymphony.com/oscache" prefix=“oscache"%>
     
     
    以一个小Demo为例:
    建立oscached的maven项目:
    pom.xml:
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hw</groupId>
    <artifactId>oscached</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>opensymphony</groupId>
    <artifactId>oscache</artifactId>
    <version>2.4.1</version>
    </dependency>
    <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
    </dependency>
    </dependencies>
    </project>
    当然,也可以建立普通动态web项目自己引入相应包
    解压下载的oscache压缩包,里面有oscache.properties文件,将它复制放于src/main/resources下
    在WEB-INF下建立index.jsp
    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib uri="http://www.opensymphony.com/oscache" prefix="oscache"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    现在时间:<%=new Date() %><br>
    <oscache:cache>
    缓存时间:<%=new Date() %>
    </oscache:cache>
    </body>
    </html>
    注意引入oscache的标签
    这时候访问index.jsp
    http://localhost:8080/oscached/index.jsp
    刷新后发现缓存时间还是不变 这时浏览器显示的页面用的是页面缓存,即没有经过后台服务器的
    打开另一个浏览器输入同样的路径,发现缓存时间仍然是这个
    如果你在路径后加入一些参数,比如
    则你会发现缓存时间不一样了,即重新发出了请求
    但此刻访问
    缓存时间还是第一次访问的那个
     
    缓存的key将以请求的URI+查询字串组成,如果你访问/oscache/index.jsp?name=ttt和/oscache/index.jsp?name=ppp将得到两份缓存。缓存默认存放在application范围,缓存时间默认为3600秒,即1小时.
     
    如果改为如下:
    <oscache:cache  key=“name”>
            name=${param.name}
    </oscache:cache>
    这时候缓存将以name为key,不再是请求的URI+查询字串组成,所以如果你访问/oscache/index.jsp?name=ttt和/oscache/index.jsp?name=ppp将得到一份缓存。
     
    如果再改为如下:
    <oscache:cache key="name" scope="session">
            name=${param.name}
    </oscache:cache>
    缓存范围设置为session,这时候缓存保存在用户的session中,如果用户的把浏览器关闭,再重新打开一个新浏览器,原来缓存的内容将不存在。
     
     
    <oscache:cache key="name" time="10">
            name=${param.name}
    </oscache:cache>
    上面设置了缓存的时间为10秒,超过10秒后,缓存的内容将失掉。
    这时候你不断刷新页面将会看到每十秒重新缓存一次
     
    <oscache:cache key="name" time="60" refresh="${param.refresh}">
            name=${param.name}
    </oscache:cache>
    refresh为true将会导致缓存的内容过期而被清除,简单地说,该属性为true用于清除缓存。
     
    下面的我本人还没测试过:
    人为管理缓存<flush />标签:
    <oscache:flush scope="application" />
    清除application范围内的所有缓存
    <oscache:flush scope="session" key="foobar" />
    清除session范围内的key为foobar的缓存。
     
    <oscache:flush scope="application" group="currencyData" />
    清除application范围内组名为currencyData内的所有缓存。
     
     
    接下来讲讲在具体项目中怎么样使用页面全局缓存(如ssm项目的前台首页显示)
    其实导入包后再要在web.xml里加上过滤器就好了
    <filter>
    <filter-name>CacheFilter</filter-name>
    <filter-class>com.opensymphony.oscache.web.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>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>CacheFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    注意配置拦截的路径 你可以只拦截特么的比如:/paly/*
  • 相关阅读:
    Python并发编程之多进程(实战)
    ThreadPoolExecutor源码分析
    JDK 1.8 JVM的变化
    JDK1.8 hashMap源码分析
    Spring解决循环依赖
    spring
    实现一个可重入锁和不可重入锁
    B树与B+树
    WebMagic
    Java高频面试题
  • 原文地址:https://www.cnblogs.com/sbj-dawn/p/7841345.html
Copyright © 2020-2023  润新知