Java 自定义 对象缓存

缓存:把所有用户的数据统一放到一个地方,为每个用户的缓存取一个名字来标示它,存的时候不要让你的缓存放上了别人的名字,取得时候不要让你取了别人的名字的数据.这就要求你的线程做到线程同步.

效果图:

图片

代码:  

package com.kerun.app.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
/** 
*@author qiyulin
*缓存实现
*1.请求几次后失效
*/
@SuppressWarnings("unchecked")
public class CacheManager {
//缓存
@SuppressWarnings("unchecked")
private static HashMap cacheMap = new HashMap(); 

//请求几次 去要新的
private static int num=10;//执行次数-----------0表示为开启

private static int count=0;//计数-----和记录当前的秒数

//单实例构造方法
private CacheManager() {
super();
}

//得到缓存

public synchronized static Object getCache(String key) {
return (Object) cacheMap.get(key);
}

//判断是否存在一个缓存

public synchronized static boolean hasCache(String key) {
return cacheMap.containsKey(key);
}

//清除所有缓存
public synchronized static void clearAll() {
cacheMap.clear();
}

//清除指定的缓存
public synchronized static void clearOnly(String key) {
cacheMap.remove(key);
}

//载入缓存
public synchronized static void putCache(String key, Object obj) {
cacheMap.put(key, obj);
}

//判断缓存是否终止
public  static boolean cacheExpired() {
System.out.println("次数"+count);
if(num==0){
return true;//终止使用缓存
}else{
if(count>=num){
count=0;//重置count
return true;
}
count++;
System.out.println("---------------------------------------请求缓存+"+count+"次数");
return false;
}

}

//获取缓存中的大小
public static int getCacheSize() {
return cacheMap.size();
}

//获取缓存对象中的所有键值名称

public static ArrayList<String> getCacheAllkey() {
ArrayList a = new ArrayList();
try {
Iterator i = cacheMap.entrySet().iterator();
while (i.hasNext()) {
java.util.Map.Entry entry = (java.util.Map.Entry) i.next();
a.add((String) entry.getKey());
}
} catch (Exception ex) {} 
return a;
}

}


//实现

@Override
public List<Ship> listShip(int agentid) {
//获取Ship下代理商的路由list
Map<String,Ship> map=listInactiveShip(agentid);
//获取router中的路由list
List<String> macs=listRouterMac(agentid);
//相同mac 从ship的list中减去
if(!map.isEmpty()){
Set<String> keys=map.keySet();
Iterator<String> it=keys.iterator();
List<Ship> shiplist=new ArrayList<Ship>();
while(it.hasNext()){
//存在
String key=it.next();
if(!macs.isEmpty()){
//macs不为空
if(macs.contains(key)){//如果有了
//什么都不做
}else{
Ship ship=map.get(key);
shiplist.add(ship);
}
}else{
//空把 200台取出来
Ship ship=map.get(key);
shiplist.add(ship);
}
}
//放入缓存-----------key一定是一个唯一的东西
CacheManager.putCache(""+agentid, shiplist);
//每次取出来都要放一次
return shiplist;
}
return null;
}

    @Override
public List<Ship> listShip(int agentid,int page, int limit) {
System.out.println("获取缓存大小"+CacheManager.getCacheSize());
List<Ship> all;
if(CacheManager.cacheExpired()){
//表示终止了
all=listShip(agentid);//重新拉取输去
}else{
//判断是否有该缓存对象--线程同步获取数据
if(CacheManager.hasCache(""+agentid)){
//存在
all=(List<Ship>) CacheManager.getCache(""+agentid);
}else{
//不存在
all=listShip(agentid);//重新拉取
}
}
//-----------------------------以上为获取的数据---------------------------------
return all;
}


猜你喜欢

转载自blog.csdn.net/qilin001cs/article/details/79108130