`

JAVA的简单缓存机制

    博客分类:
  • JAVA
阅读更多

说明: 该缓存结构可能存在多线程安全问题,参考ConcurrentHashMap线程安全结构,做修改

package cache;

import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class CacheMgr {
	
	private static Map cacheMap = new HashMap();
	private static Map cacheConfMap = new HashMap();
	
	private CacheMgr(){
	}
	
	private static CacheMgr cm = null;
	
        //单例
	public static CacheMgr getInstance(){
		if (cm == null) {
			synchronized(CacheMgr.class){
				if(cm == null){
					cm = new CacheMgr();
					Thread t = new ClearCache();
					t.start();
				}
			}
		}
		return cm;
	}
	
	/**
	 * 增加缓存
	 */
	public boolean addCache(Object key,Object value,CacheConfModel ccm){
		boolean flag = false;
		cacheMap.put(key, value);
		cacheConfMap.put(key, ccm);
		
		System.out.println("now addcache=="+cacheMap.size());
		return true;
	}
	
	public boolean removeCache(Object key){
		cacheMap.remove(key);
		cacheConfMap.remove(key);
		System.out.println("now removeCache=="+cacheMap.size());
		return true;
	}
	
	public static class ClearCache extends Thread{
		public void run(){
			while(true){
				Set tempSet = new HashSet();
				Set set = cacheConfMap.keySet();
				Iterator it = set.iterator();
				while(it.hasNext()){
					Object key = it.next();
					CacheConfModel ccm = (CacheConfModel)cacheConfMap.get(key);
					if(!ccm.isForever()){
						 if((new Date().getTime()-ccm.getBeginTime())>= ccm.getDurableTime()*60*1000){      
							 //可以清除,先记录下来     
							 tempSet.add(key);
						 }
					}
				}
				
				//真正清除
				Iterator tempIt = tempSet.iterator();
				while(tempIt.hasNext()){     
					Object key = tempIt.next();     
					cacheMap.remove(key);     
					cacheConfMap.remove(key);         
				}
				System.out.println("now thread================>"+cacheMap.size());
				//休息
				try {
					Thread.sleep(60*1000L);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
	}
	
}

class CacheConfModel implements java.io.Serializable{
	private long beginTime;
	private boolean isForever = false;
	private int durableTime;
	
	
	public long getBeginTime() {
		return beginTime;
	}
	public void setBeginTime(long beginTime) {
		this.beginTime = beginTime;
	}
	public boolean isForever() {
		return isForever;
	}
	public void setForever(boolean isForever) {
		this.isForever = isForever;
	}
	public int getDurableTime() {
		return durableTime;
	}
	public void setDurableTime(int durableTime) {
		this.durableTime = durableTime;
	}
	
}
分享到:
评论

相关推荐

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

    在 Java 中,缓存机制的实现可以通过各种方式,例如使用 HashMap、TreeMap、LinkedHashMap 等数据结构来存储缓存对象。下面是一个简单的缓存管理器的实现: CacheManager 类的实现: CacheManager 类是一个简单...

    Java实现简单LRU缓存机制的方法

    Java实现简单LRU缓存机制的方法 Java实现简单LRU缓存机制的方法是指通过Java语言实现的一种缓存机制,该机制可以根据最近最少使用的原则淘汰缓存中的数据。缓存机制的实现主要是通过哈希表和双向链表来实现的。 ...

    Java缓存技术的使用实例

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

    ListView缓存机制

    ViewHolder是一个简单的Java类,用于存储每个item View中的子View引用。通过持有这些引用,避免了在getView()方法中频繁查找子View的操作,提高了性能。在适配器的getView()方法中,首先检查convertView是否为null,...

    spring简单的缓存

    参考链接提供的CSDN博客文章《[Spring简单缓存实现](http://blog.csdn.net/maoyeqiu/article/details/50238035)》中,作者详细介绍了如何在Spring项目中实现缓存,包括配置、注解使用以及注意事项,是一个很好的学习...

    Android LRUCache机制 缓存机制

    ### Android LRUCache机制详解 #### 一、LRUCache简介 在Android开发过程中,缓存技术是一项重要的优化手段,可以显著提升应用性能并改善用户体验。LRUCache(Least Recently Used Cache,最近最少使用缓存)是一种...

    java缓存文档

    Java内置的缓存机制主要体现在Java 8及后续版本的`java.util.concurrent.ConcurrentHashMap`类的`computeIfAbsent()`和`putIfAbsent()`方法上,这些方法可以在不锁定整个集合的情况下进行原子操作,适用于简单的缓存...

    (Java 综合练习)简单的缓存同步(使用Thread,Timer)

    本实践项目是关于如何使用线程(Thread)和定时器(Timer)来实现一个简单的缓存同步机制。我们将探讨以下几个关键知识点: 1. **线程基础**: - 在Java中,`Thread`类是线程的基类,通过继承或实现`Runnable`接口...

    分页缓存

    实现分页缓存的关键在于设计一个高效且可扩展的缓存机制。Java中常用的缓存库有Ehcache、Guava Cache以及Spring Data Redis等。这里我们以Ehcache为例,讨论如何构建一个简单的分页缓存系统。 1. **Ehcache配置**:...

    LRU 缓存机制(java代码).docx

    下面详细介绍如何使用 Java 实现一个简单的 LRU 缓存机制。 ##### 1. 定义双向链表节点类 `Node` ```java class Node { int key; int value; Node prev; Node next; public Node(int key, int value) { ...

    java 数据缓存

    理解这些缓存机制的原理和实践,对于优化Java应用程序性能至关重要。开发者可以根据具体需求选择合适的缓存解决方案,同时注意考虑并发控制、内存管理和数据过期策略等因素,确保系统的稳定性和效率。在实际工作中,...

    java之数据库缓存

    常见的数据库缓存机制包括MySQL的InnoDB Buffer Pool,Oracle的Shared Pool等。 在Java世界里,最常用的数据库缓存解决方案有以下几种: 1. **Redis**:一个开源的、支持网络、基于内存、可持久化的键值对数据库。...

    java 创建字符串缓存类

    下面是一个简单的字符串缓存类实现示例,我们将称之为`StringCache`: ```java public class StringCache { private static final int CAPACITY = 100; // 缓存容量 private Map, String> cache = new HashMap...

    JAVA_WEB_缓存技术

    - `threadKeys` 是一个ArrayList,存储了当前处于线程更新中的key,这可能是一个并发控制机制,确保同一时刻只有一个线程在更新特定的缓存项。 `CacheOperation` 类还实现了单例模式,确保全局只有一个实例存在,...

    Java缓存技术

    缓存机制在提高系统响应速度方面发挥着重要作用。在高并发情况下,使用缓存能够显著降低对数据库的压力,进而提高整个系统的性能。具体而言,当用户首次访问某个数据时,系统会从数据库中获取数据并将这些数据存储在...

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

    总的来说,Java中的缓存机制可以通过多种方式实现,包括但不限于简单的HashMap、使用并发容器、或者集成专业的缓存服务。理解这些缓存机制并选择合适的实现方式,对于优化Java应用的性能至关重要。

    Java缓存讨论.pdf

    ShiftOne Object Cache提供了一种基础的Java对象缓存机制,实现包括FIFO、LRU和LFU在内的多种缓存策略,允许开发者调整最大元素数量和生存时间。 WhirlyCache是一个内存对象缓存,强调速度和可配置性,旨在通过缓存...

    基于Java的实例源码-Java缓存工具 SimpleCache.zip

    【Java缓存工具 SimpleCache】是一个实用的Java编程示例,它展示了如何在应用程序中实现一个简单的缓存机制。在软件开发中,缓存是一种优化技术,用于存储频繁访问的数据,以便快速检索,减少对主数据库或其他计算...

Global site tag (gtag.js) - Google Analytics