`
农村哥们
  • 浏览: 293277 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java缓存实现

阅读更多
一、在开发项目工程时,经常会遇到保存某些值放到系统的cache中,现用Cache.java和CacheManager.java来管理。具体代码分别如下:
public class Cache {
        private String key;
        private Object value;
        private long timeOut;
        private boolean expired;
        public Cache() {
                super();
        }
               
        public Cache(String key, String value, long timeOut, boolean expired) {
                this.key = key;
                this.value = value;
                this.timeOut = timeOut;
                this.expired = expired;
        }

        public String getKey() {
                return key;
        }

        public long getTimeOut() {
                return timeOut;
        }

        public Object getValue() {
                return value;
        }

        public void setKey(String string) {
                key = string;
        }

        public void setTimeOut(long l) {
                timeOut = l;
        }

        public void setValue(Object object) {
                value = object;
        }

        public boolean isExpired() {
                return expired;
        }

        public void setExpired(boolean b) {
                expired = b;
        }
}

另外一个类:
import java.util.Date;
import java.util.HashMap;

public class CacheManager {
        private static HashMap cacheMap = new HashMap();

        /**
         * This class is singleton so private constructor is used.
         */
        private CacheManager() {
                super();
        }

        /**
         * returns cache item from hashmap
         * @param key
         * @return Cache
         */
        private synchronized static Cache getCache(String key) {
                return (Cache)cacheMap.get(key);
        }

        /**
         * Looks at the hashmap if a cache item exists or not
         * @param key
         * @return Cache
         */
        private synchronized static boolean hasCache(String key) {
                return cacheMap.containsKey(key);
        }

        /**
         * Invalidates all cache
         */
        public synchronized static void invalidateAll() {
                cacheMap.clear();
        }

        /**
         * Invalidates a single cache item
         * @param key
         */
        public synchronized static void invalidate(String key) {
                cacheMap.remove(key);
        }

        /**
         * Adds new item to cache hashmap
         * @param key
         * @return Cache
         */
        private synchronized static void putCache(String key, Cache object) {
           cacheMap.put(key, object);
        }

        /**
         * Reads a cache item's content
         * @param key
         * @return
         */
        public static Cache getContent(String key) {
                 if (hasCache(key)) {
                        Cache cache = getCache(key);
                        if (cacheExpired(cache)) {
                                cache.setExpired(true);
                        }
                        return cache;
                 } else {
                         return null;
                 }
        }

        /**
         *
         * @param key
         * @param content
         * @param ttl
         */
        public static void putContent(String key, Object content, long ttl) {
                Cache cache = new Cache();
                cache.setKey(key);
                cache.setValue(content);
                cache.setTimeOut(ttl + new Date().getTime());
                cache.setExpired(false);
                putCache(key, cache);
        }
       
        /** @modelguid {172828D6-3AB2-46C4-96E2-E72B34264031} */
        private static boolean cacheExpired(Cache cache) {
                if (cache == null) {
                        return false;
                }
                long milisNow = new Date().getTime();
                long milisExpire = cache.getTimeOut();
                if (milisExpire < 0) {                // Cache never expires
                        return false;
                } else if (milisNow >= milisExpire) {
                        return true;
                } else {
                        return false;
                }
        }

}

二、在web应用中启动服务加载缓存,具体代码如下
新建个servlet,保证启动服务时运行,加载缓存类
public class CacheServlet extends HttpServlet {

/**
* Constructor of the object.
*/
public CacheServlet() {
super();
CacheManager.invalidateAll();
CacheManager.putContent("a", "a", 0);
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}

在web.xml加入配置
<servlet>
    <servlet-name>CacheServlet</servlet-name>
    <servlet-class>com.cache.CacheServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
加入load-on-startup为了让启动时初始化class,不需要加入mapping

这样就可以启动时候加载缓存类,内存中保存着CacheManager
分享到:
评论
4 楼 zsw_it_eye 2013-12-25  
     
3 楼 charles751 2012-09-03  
集群部署环境下不适用。
2 楼 一江春水邀明月 2012-02-11  
推荐 http://www.source-code.biz/snippets/java/6.htm 用 LinkedHashMap 吧
1 楼 一江春水邀明月 2012-02-11  
貌似缺一个对Hashmap 中的过时对象清理的机制, 你这样很容易造成OOM 的。

而且即使你用Timer去遍历Hashmap 元素并做清理还是不能保证就不会OOM, 缓存不推荐用Hashmap 实现的。

相关推荐

    Java缓存技术的使用实例

    它很可能包含了一个简单的Java缓存实现,可能使用了HashMap或者其他自定义的数据结构来模拟缓存操作。这样的实例通常会包括以下组件: 1. **缓存接口**:定义缓存的基本操作,如put、get、remove和clear。 2. **...

    java缓存实现与spring托管

    2. EHCACHE页面缓存的配置 5 2.1 EHCACHE的类层次模型 5 2.2环境搭建 6 2.3 EHCACHE配置文件中元素说明 8 2.4 在工程中单独使用 10 3. 在SPRING中运用EHCACHE 17 4. 分布式缓存集群环境配置 19 4.1 集群配置方式 19 ...

    JAVA缓存入门文档..Cache

    ### JAVA缓存入门文档:EHCache #### 一、EHCache简介 EHCache 是一个纯 Java 缓存实现,主要用于提高应用程序性能。它通过在内存中缓存数据来减少对数据库或其他外部系统的调用次数,从而加快应用响应速度。...

    java map 实现缓存技术

    本文将深入探讨如何使用Java Map实现缓存技术,以及其中的关键知识点。 首先,让我们理解什么是缓存。缓存是一种存储技术,用于暂时保存经常访问的数据,以便于快速检索。在Java中,我们通常使用HashMap、...

    Java利用ConcurrentHashMap实现本地缓存demo

    Java利用ConcurrentHashMap实现本地缓存demo; 基本功能有缓存有效期、缓存最大数、缓存存入记录、清理线程、过期算法删除缓存、LRU算法删除、获取缓存值等功能。 复制到本地项目的时候,记得改包路径哦~

    Java对象缓存系统的实现,实现了LRU算法,并可以进行集群同步

    **Java缓存实现** 在`Cache.java`文件中,可能定义了基础的缓存接口或抽象类,它规定了缓存的基本操作,如put、get、remove等。而`LRUCache.java`作为具体实现,继承或实现了`Cache.java`,并加入了LRU策略来管理...

    java 通过文件实现缓存

    java实现缓存可以通过读取本地文件的方式实现,改代码就是通过读取本地文件实现缓存的简单例子

    java缓存[借鉴].pdf

    在给定的文件中,我们看到了两种主要的Java缓存实现方式:文件缓存和内存缓存。 文件缓存通常涉及将数据持久化到磁盘上,以便在后续请求时快速加载。这种缓存可以使用不同的格式,如XML、序列化的DAT文件或其他...

    java实现cache小实例

    下面是一个简单的Java缓存实现,使用HashMap作为基础存储结构,并实现了LRU淘汰策略: ```java import java.util.HashMap; import java.util.Map; public class SimpleCache, V&gt; { private final int capacity; ...

    java简单的缓存池实现

    java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现。

    分页缓存

    Ehcache本身提供了线程安全的保证,但如果是自定义的缓存实现,需要考虑并发读写的问题,可以使用`synchronized`关键字或`java.util.concurrent`包中的工具类。 7. **异常处理**:在处理缓存和数据库查询时,需要...

    Java缓存技术深入了解

    本篇文章将深入探讨Java中的缓存实现,包括基础概念、常见缓存库以及如何在实际项目中应用。 1. **缓存基础** - 缓存的基本原理是基于局部性原理,即最近使用的数据很可能在未来还会被再次使用。 - 缓存分为内存...

    java Map实现的cache manager,定时清除缓存里面的值

    java Map实现的cache manager,定时清除缓存里面的值,使数据一致保持最新

    JAVA缓存技术深入了解

    3. **应用框架集成的缓存**:例如`Spring Cache`,它提供了一种抽象层,可以将缓存逻辑注入到Spring管理的bean中,支持多种底层缓存实现,如Ehcache、Guava等。 接下来,我们关注几个关键的Java缓存库: - **...

    java缓存类

    它支持多种缓存实现,包括Ehcache和Guava,使得选择合适的缓存库变得容易。 Java缓存类的工作原理通常包括以下几个步骤: 1. **数据请求**:当应用程序需要数据时,首先检查缓存中是否存在。 2. **缓存命中**:如果...

    Java中常用缓存Cache机制的实现

    本文主要介绍的是Java中一种简单的基于HashMap的内存缓存实现。 在Java中,缓存通常分为两类:文件缓存和内存缓存。文件缓存将数据存储在磁盘上,常见的文件格式有XML、序列化的DAT文件等。这种缓存方式在系统重启...

    java 缓存插件ehcache 应用实例

    Ehcache是一款广泛使用的开源Java缓存框架,尤其在处理大量数据时,它可以显著提升应用程序的效率。本文将深入探讨Ehcache在实际应用中的实例。 一、Ehcache简介 Ehcache是由Terracotta公司开发的高性能、易用的...

    java缓存数据

    - **Spring Cache**:Spring框架提供了缓存抽象,支持多种缓存实现,如 Ehcache、Hazelcast 和 Guava。用户可以通过注解`@Cacheable`、`@CacheEvict`等控制缓存操作,源码中,Spring会根据配置选择合适的缓存管理器...

    详解java缓存ppt讲义

    Java缓存技术在企业级开发中扮演着至关重要的角色,主要目的是提高系统性能,减少不必要的计算和I/O操作。本文将深入探讨缓存的概念、作用、类型以及在Java环境下的应用。 缓存,简单来说,就是高速缓冲存储器,它...

Global site tag (gtag.js) - Google Analytics