- 浏览: 1068735 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
本实例将模仿一个JSP页面从数据库中取得一个LIST集合的数据,模型是模拟一个新闻发布页面去后台取得信息,系统设定10秒钟更新一次缓存,而前台页面每隔5秒打印一次集合信息。
<1>POJO缓存实现
1.缓存的基类BaseCache
package com.test;
import java.util.Date;
import com.opensymphony.oscache.base.NeedsRefreshException;
import com.opensymphony.oscache.general.GeneralCacheAdministrator;
public class BaseCache extends GeneralCacheAdministrator {
// 过期时间(单位为秒);
private int refreshPeriod;
// 关键字前缀字符;
private String keyPrefix;
private static final long serialVersionUID = -4397192926052141162L;
public BaseCache(String keyPrefix, int refreshPeriod) {
super();
this.keyPrefix = keyPrefix;
this.refreshPeriod = refreshPeriod;
}
// 添加被缓存的对象;
public void put(String key, Object value) {
this.putInCache(this.keyPrefix + "_" + key, value);
}
// 删除被缓存的对象;
public void remove(String key) {
this.flushEntry(this.keyPrefix + "_" + key);
}
// 删除所有被缓存的对象;
public void removeAll(Date date) {
this.flushAll(date);
}
public void removeAll() {
this.flushAll();
}
// 获取被缓存的对象;
public Object get(String key) throws Exception {
try {
return this.getFromCache(this.keyPrefix + "_" + key,
this.refreshPeriod);
} catch (NeedsRefreshException e) {
this.cancelUpdate(this.keyPrefix + "_" + key);
throw e;
}
}
private static BaseCache cache;
public static BaseCache getInstance()
{
if(cache==null)
{
cache = new BaseCache("count",10);
}
return cache;
}
}
2.缓存的管理类CacheUser
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class CacheUser {
private BaseCache newsCache;
private static CacheUser instance;
private static Object lock = new Object();
private CacheUser() {
//这个根据配置文件来,初始BaseCache而已;
newsCache = new BaseCache("news",10); //在这里10表示的10秒钟更新一次缓存
}
public List<String> getUser(String newsID) {
try {
List<String> list = null;
list = (List<String>) newsCache.get(newsID);
return list;
//因为是10秒钟更新一次缓存,所以每隔10秒后newsCache.get(newsID)就会为空,抛出异常,重新去数据库取得数据
} catch (Exception e) {
System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8";
String user = "root";
String pwd = "root";
List<String> lists =new ArrayList<String>();
try
{
String sql = "select * from kindergarden_user";
Class.forName(driver);
con = DriverManager.getConnection(url,user,pwd);
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next())
{
String name = rs.getString("Name");
lists.add(name);
}
newsCache.put("userlist",lists); //重新取得数据以后,放到缓存中
}
catch(Exception e3)
{
e3.printStackTrace();
}
finally
{
try
{
}
catch(Exception ee)
{
try {
rs.close();
stmt.close();
con.close();
} catch (Exception exx) {
exx.printStackTrace();
}
}
}
return lists;
}
}
public void putUser(User news) { newsCache.put(news.getId()+"",news); }
//通过单线程的方式取得缓存的对象
public static CacheUser getInstance(){
if (instance == null){
synchronized( lock ){
if (instance == null){
instance = new CacheUser();
}
}
}
return instance;
}
public void removeUser(String newsID) { newsCache.remove(newsID); }
public void removeAllUsers() {
newsCache.removeAll();
}
}
3.前端的JSP页面userlist.jsp
<%@ page language="java" import="java.util.*,java.sql.*,com.test.*" pageEncoding="GB2312" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/WEB-INF/classes/oscache.tld" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
%>
<%
List<String> list = null;
CacheUser cm=CacheUser.getInstance();
//通过单利模式取得缓存对象,然后从缓存中取得LIST集合,前端页面就不用管集合是从数据库还是缓存中得到了,由缓存管理的类去进行管理
for (int i = 0; i < 1000; i++) {
try {
list = (List<String>)cm.getUser("userlist");
System.out.println(list);
if(i==10){
//删除缓存id的对象
cm.removeUser("userlist");
}
if(i==20){
//删除所有缓存的对象
cm.removeAllUsers();
}
Thread.sleep(5000);
} catch (Exception e) {
}
}
%>
</body>
</html>
<2>JSP页面缓存实现
1.在WEB.XML文件中配置
<taglib>
<taglib-uri>oscache</taglib-uri>
<taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>
</taglib>
2.编写index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="cache" uri="oscache" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
没有缓存的日期: <%= new Date() %><p>
<!--自动刷新-->
<cache:cache time="10">
每30秒刷新缓存一次的日期: <%= new Date() %>
<!--该段代码处的时期是10秒钟清空一次,也就是10秒钟取得一次,你在10秒内刷新index.jsp该时间是不变的。-->
</cache:cache>
<!--手动刷新-->
<cache:cache key="testcache">
手动刷新缓存的日期: <%= new Date() %> <p>
<!--该段代码处的时间永远都不变,除非你手动刷新该处的时间,要么该时间永远保存在缓存中。-->
</cache:cache>
<a href="cache2.jsp">手动刷新</a>
</body>
</html>
3.cache2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="cache" uri="oscache" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
缓存已刷新...<p>
<cache:flush key="testcache" scope="application"/>
<a href="index.jsp">返回</a>
</body>
</html>
- OSCache.rar (21 KB)
- 下载次数: 58
发表评论
-
FreeMaker实现静态化技术(3)【标签的使用】
2010-08-27 15:14 1783写在ftl模板文件中的,类似JSP中的JSTL新的语法 1. ... -
FreeMaker实现静态化技术(2)【网页版本】
2010-08-27 14:21 17731.在WebRoot目录下新建一个templates文件夹,再 ... -
FreeMaker实现静态化技术(1)【Java版本】
2010-08-27 14:15 1923FreeMaker是一个优秀的模板引擎,负责将数据合并到模板中 ... -
OSCache缓存技术(8)【JSP页面从数据库取得数据缓存列子】
2010-08-27 11:15 1476index.jsp <%@ page language ... -
OSCache缓存技术(7)【整合LOG4J】
2010-08-27 10:49 14061.在项目中加入log4j的包 2.在classes中加入l ... -
大型网站性能优化的通用方法
2010-08-27 09:48 11471、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静 ... -
OSCache缓存技术(5)
2010-08-27 08:17 1670第四部分:小结及其引 ... -
OSCache缓存技术(4)
2010-08-27 08:16 1254第三部分: Demo 一、对象缓存 1 、 Cache ... -
OSCache缓存技术(3)
2010-08-27 08:15 1154三、OSCache的基本用法(缓存JSP页面中部分) (一) ... -
OSCache缓存技术(2)
2010-08-27 08:13 1560第二部分: OSCache 使用指南 一、下载安装 ... -
OSCache缓存技术(1)
2010-08-27 08:12 1387一、简介 Cache 是一种用于提高系统响应速度 、改善系 ...
相关推荐
osCache 是一个开源的、基于Java的缓存框架,它为Java应用程序提供了高效且可配置的内存缓存功能。在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念...
**osCache缓存技术详解** osCache是一款广泛应用于Java应用程序中的开源缓存解决方案,由OpenSymphony团队开发。它提供了一种高效、可扩展的方式来管理应用程序中的数据缓存,从而提高系统的性能和响应速度。...
在压缩包中的文件,如`servlet+天气预报+缓存技术`,可能包含了一个完整的示例项目,包括了上述步骤的代码实现。你可以直接运行该项目,通过查看和分析代码来深入理解OsCache的使用方式。 总结来说,OsCache是一个...
通过这个实例,你可以实际操作,理解OSCache的工作原理,并学习如何根据业务需求调整缓存策略。同时,了解如何在J2EE应用程序中优雅地集成缓存,提高系统效率和用户体验。在实践中,还可以考虑与其他技术,如...
**基于OSCache的页面缓存技术详解** 在Web应用程序中,页面缓存是一种常见的优化策略,它可以显著提高网站性能,减少服务器压力,并提供更快的用户体验。OSCache是Apache软件基金会的开源项目,它是一个高性能、...
为了提高系统性能,通常会采用缓存技术来减少对数据库的直接访问,而OSCache就是一种广泛使用的开源缓存解决方案。本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是...
**osCache:高效缓存框架详解与实例应用** osCache是一款流行且强大的Java缓存框架,主要用于提高应用程序的性能和响应速度。它通过将经常访问的数据存储在内存中,避免了反复读取数据库或计算数据的过程,从而显著...
- **API集成**:使用osCache提供的API进行缓存的增删改查操作,如`CacheManager.getInstance().getCache("myCache")`获取缓存实例。 4. **使用教程** - **创建缓存**:定义一个缓存,例如`Cache cache = ...
在IT领域中,缓存技术是提高系统性能的关键一环,尤其是在高并发、大数据量的应用场景下。oscache,全称OpenSymphony OSCache,是一个广泛使用的开源Java对象缓存框架,它允许开发者将数据存储在内存中,以减少对...
在实际应用中,OsCache 可以广泛应用于各类Java项目,比如Web应用、大数据处理、分布式系统等,通过缓存技术提高整体性能。不过,需要注意的是,合理地设置缓存容量、过期策略以及及时清理缓存,是使用OsCache或其他...
例如,使用`CacheManager.getInstance().getCache("myCache")`获取名为“myCache”的缓存实例,然后进行对象的存取操作。 6. 使用示例 此处可给出具体的代码示例,展示如何创建、更新、查询和移除缓存项,以及如何...
### 缓存技术详解 #### 一、缓存的基本概念及作用 缓存技术是一种用于提高数据访问速度和系统响应时间的技术。它通过在靠近应用的地方存储数据副本,减少对后端系统的请求次数,从而加快数据获取的速度。缓存在Web...
#### 三、缓存技术的应用实例 以用友NC-UAP平台为例,该平台提供了一套完整的内存级缓存解决方案——NCV5(用友NC-UAP版本5.0)。其中包含了一系列关于缓存管理和数据更新的高级特性。 ##### 3.1 内存占用 在设计...
在代码中,可以通过`CacheManager`获取并操作缓存实例。 总结,OSCache作为一个强大的缓存解决方案,为企业级Java应用提供了高性能的缓存支持。理解和熟练运用OSCache,有助于提升系统的运行效率,降低数据库压力,...
在Java开发领域,缓存技术是提高系统性能的关键工具之一。oscache-2.3.jar是专门为Java应用程序设计的一个高效、轻量级的缓存框架,由OpenSymphony开源组织开发。本文将深入探讨oscache的核心功能、工作原理及其在...
- **缓存**:缓存是一种技术,用于临时存储常用数据,以减少访问原始数据源(如数据库)的时间。 - **osCache组件**:包括缓存管理器(Cache Manager)、缓存(Cache)、缓存项(Cache Item)等核心组件,提供了...
缓存技术有多种,常见的缓存技术包括 OScache、Memcached、Redis 等。OSCache 是一种流行的缓存技术,广泛应用于 Java 开发中。Memcached 是一种高性能的缓存系统,广泛应用于大型网站中。 MySQL 缓存解决方案 ...
该压缩包中有一个WORD和一个PPT,WORD中介绍...PPT中介绍了缓存体系,JVM内存模型,JCONSOLE监控工具的使用,Oscache缓存架构 Ehcache缓存架构 Memcached缓存架构 JiveCache缓存架构 Terracotta JVM级缓存架构等相关技术