`
baobeituping
  • 浏览: 1068735 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

OSCache缓存技术(6)【实例】

阅读更多

本实例将模仿一个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缓存技术入门实例

    osCache 是一个开源的、基于Java的缓存框架,它为Java应用程序提供了高效且可配置的内存缓存功能。在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念...

    oscache缓存技术

    **osCache缓存技术详解** osCache是一款广泛应用于Java应用程序中的开源缓存解决方案,由OpenSymphony团队开发。它提供了一种高效、可扩展的方式来管理应用程序中的数据缓存,从而提高系统的性能和响应速度。...

    OsCache缓存框架使用示例

    在压缩包中的文件,如`servlet+天气预报+缓存技术`,可能包含了一个完整的示例项目,包括了上述步骤的代码实现。你可以直接运行该项目,通过查看和分析代码来深入理解OsCache的使用方式。 总结来说,OsCache是一个...

    OSCache学习例子 实例

    通过这个实例,你可以实际操作,理解OSCache的工作原理,并学习如何根据业务需求调整缓存策略。同时,了解如何在J2EE应用程序中优雅地集成缓存,提高系统效率和用户体验。在实践中,还可以考虑与其他技术,如...

    基于OSCache的页面缓存(收藏)

    **基于OSCache的页面缓存技术详解** 在Web应用程序中,页面缓存是一种常见的优化策略,它可以显著提高网站性能,减少服务器压力,并提供更快的用户体验。OSCache是Apache软件基金会的开源项目,它是一个高性能、...

    hibernate+oscache实现二级缓存实例

    为了提高系统性能,通常会采用缓存技术来减少对数据库的直接访问,而OSCache就是一种广泛使用的开源缓存解决方案。本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是...

    oscache的使用实例和详解

    **osCache:高效缓存框架详解与实例应用** osCache是一款流行且强大的Java缓存框架,主要用于提高应用程序的性能和响应速度。它通过将经常访问的数据存储在内存中,避免了反复读取数据库或计算数据的过程,从而显著...

    oscache-java缓存框架

    - **API集成**:使用osCache提供的API进行缓存的增删改查操作,如`CacheManager.getInstance().getCache("myCache")`获取缓存实例。 4. **使用教程** - **创建缓存**:定义一个缓存,例如`Cache cache = ...

    oscache对象缓存

    在IT领域中,缓存技术是提高系统性能的关键一环,尤其是在高并发、大数据量的应用场景下。oscache,全称OpenSymphony OSCache,是一个广泛使用的开源Java对象缓存框架,它允许开发者将数据存储在内存中,以减少对...

    OsCache实例

    在实际应用中,OsCache 可以广泛应用于各类Java项目,比如Web应用、大数据处理、分布式系统等,通过缓存技术提高整体性能。不过,需要注意的是,合理地设置缓存容量、过期策略以及及时清理缓存,是使用OsCache或其他...

    OSCache配置说明文档

    例如,使用`CacheManager.getInstance().getCache("myCache")`获取名为“myCache”的缓存实例,然后进行对象的存取操作。 6. 使用示例 此处可给出具体的代码示例,展示如何创建、更新、查询和移除缓存项,以及如何...

    缓存技术详解

    ### 缓存技术详解 #### 一、缓存的基本概念及作用 缓存技术是一种用于提高数据访问速度和系统响应时间的技术。它通过在靠近应用的地方存储数据副本,减少对后端系统的请求次数,从而加快数据获取的速度。缓存在Web...

    内存缓存技术

    #### 三、缓存技术的应用实例 以用友NC-UAP平台为例,该平台提供了一套完整的内存级缓存解决方案——NCV5(用友NC-UAP版本5.0)。其中包含了一系列关于缓存管理和数据更新的高级特性。 ##### 3.1 内存占用 在设计...

    oscache-2.0.jar

    在代码中,可以通过`CacheManager`获取并操作缓存实例。 总结,OSCache作为一个强大的缓存解决方案,为企业级Java应用提供了高性能的缓存支持。理解和熟练运用OSCache,有助于提升系统的运行效率,降低数据库压力,...

    oscache-2.3.jar

    在Java开发领域,缓存技术是提高系统性能的关键工具之一。oscache-2.3.jar是专门为Java应用程序设计的一个高效、轻量级的缓存框架,由OpenSymphony开源组织开发。本文将深入探讨oscache的核心功能、工作原理及其在...

    oscache 例子

    - **缓存**:缓存是一种技术,用于临时存储常用数据,以减少访问原始数据源(如数据库)的时间。 - **osCache组件**:包括缓存管理器(Cache Manager)、缓存(Cache)、缓存项(Cache Item)等核心组件,提供了...

    MysqL缓存的解决方案

    缓存技术有多种,常见的缓存技术包括 OScache、Memcached、Redis 等。OSCache 是一种流行的缓存技术,广泛应用于 Java 开发中。Memcached 是一种高性能的缓存系统,广泛应用于大型网站中。 MySQL 缓存解决方案 ...

    JAVA缓存概念体系及应用

    该压缩包中有一个WORD和一个PPT,WORD中介绍...PPT中介绍了缓存体系,JVM内存模型,JCONSOLE监控工具的使用,Oscache缓存架构 Ehcache缓存架构 Memcached缓存架构 JiveCache缓存架构 Terracotta JVM级缓存架构等相关技术

Global site tag (gtag.js) - Google Analytics