java 缓存
2015-06-05 10:11
134 查看
java 缓存可以分为两大类:
一、通过文件缓存,顾名思义文件缓存是把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其他文件格式。
二、内存缓存,也就是实现一个类中静态Map。对这个Map进行常规的增删查。
package com.lendingcloud.rms.srr;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
public class CacheManager
{
private static HashMap cacheMap = new HashMap();
//单例构造方法
private CacheManager(){
super();
}
//获取布尔值的缓存
public static boolean getSimpleFlag(String key){
try
{
return (Boolean) cacheMap.get(key);
}
catch (NullPointerException e)
{
return false;
}
}
public static long getServerStarttdt(String key){
try
{
return (Long)cacheMap.get(key);
}
catch (Exception ex)
{
return 0;
}
}
//设置布尔值的缓存
public synchronized static boolean setSimpleFlag(String key,boolean flag){
if(flag&& getSimpleFlag(key)){//加入真不允许被覆盖
return false;
}else{
cacheMap.put(key,flag);
return true;
}
}
public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){
if(cacheMap.get(key)==null){
cacheMap.put(key,serverbegrundt);
return true;
}else{
return false;
}
}
//得到缓存,同步静态方法
private synchronized static Cache getCache(String key){
return (Cache) cacheMap.get(key);
}
//判断是否存在一个缓存
private synchronized static boolean hasCache(String key){
return cacheMap.containsKey(key);
}
//清除所有缓存
public synchronized static void clearAll(){
cacheMap.clear();
}
//清除某一特定缓存,通过遍历HASHMAP下的所有对象,来判断它的key与传入的type是否匹配
public synchronized static void clearAll(String type){
Iterator i=cacheMap.entrySet().iterator();
String key;
ArrayList<String> arr=new ArrayList<String>();
try
{
while(i.hasNext()){
java.util.Map.Entry entry =(java.util.Map.Entry)i.next();
key=(String)entry.getKey();
if(key.startsWith(type)){//如果匹配则删除掉
arr.add(key);
}
}
for(int k=0;k<arr.size();k++){
clearOnly(arr.get(k));
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
//清除指定的缓存
public synchronized static void clearOnly(String key){
cacheMap.remove(key);
}
//载入缓存
public synchronized static void putCache(String key,Cache obj){
cacheMap.put(key,obj);
}
//获取缓存信息
public static Cache getCacheInfo(String key){
if(hasCache(key)){
Cache cache = getCache(key);
if(cacheExpired(cache)){
cache.setExpired(true);
}
return cache;
}else
return null;
}
//载入缓存信息
public static void putCacheInfo(String key,Cache obj,long dt,boolean expired){
Cache cache=new Cache();
cache.setKey(key);
//设置多久之后更新缓存
cache.setTimeOut(dt+System.currentTimeMillis());
cache.setValue(obj);
cache.setExpired(expired);//缓存默认载入时,终止状态为false
cacheMap.put(key,cache);
}
//重写载入缓存信息
public static void putCacheInfo(String key,Cache obj,long dt){
Cache cache =new Cache();
cache.setKey(key);
cache.setTimeOut(dt+System.currentTimeMillis());
cache.setValue(obj);
cache.setExpired(false);
cacheMap.put(key,cache);
}
//判断缓存是否终止
public static boolean cacheExpired(Cache cache) {
if (null == cache) { //传入的缓存不存在
return false;
}
long nowDt = System.currentTimeMillis(); //系统当前的毫秒数
long cacheDt = cache.getTimeOut(); //缓存内的过期毫秒数
if (cacheDt <= 0||cacheDt>nowDt) { //过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE
return false;
} else { //大于过期时间 即过期
return true;
}
}
//获取缓存中的大小
public static int getCacheSize(){
return cacheMap.size();
}
//获取指定类型的大小
public static int getCacheSize(String type){
int k=0;
Iterator i = cacheMap.entrySet().iterator();
String key;
try{
while(i.hasNext()){
java.util.Map.Entry entry =(java.util.Map.Entry)i.next();
key=(String)entry.getKey();
if(key.indexOf(type)!=-1){//如果匹配则删除掉
k++;
}
}
}catch(Exception ex){
ex.printStackTrace();
}
return k;
}
//获取缓存对象中的所有键值名称
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){}finally{
return a;
}
}
//获取缓存对象中指定类型的键值名称、
public static ArrayList<String> getCacheListkey(String type){
ArrayList a = new ArrayList();
String key;
try{
Iterator i =cacheMap.entrySet().iterator();
while(i.hasNext()){
java.util.Map.Entry entry=(java.util.Map.Entry)i.next();
key=(String)entry.getKey();
if(key.indexOf(type)!=-1){
a.add(key);
}
}
}catch(Exception ex){}finally{
return a;
}
}
}
package com.lendingcloud.rms.srr;
public class Cache {
private String key;//缓存ID
private Object value;//缓存数据
private long timeOut;//更新时间
private boolean expired;//是否终止
public Cache(){
super();
}
public Cache(String key,Object value,long timeOut,boolean expired){
this.key=key;
this.value=value;
this.timeOut=timeOut;
this.expired=expired;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public long getTimeOut() {
return timeOut;
}
public void setTimeOut(long timeOut) {
this.timeOut = timeOut;
}
public boolean isExpired() {
return expired;
}
public void setExpired(boolean expired) {
this.expired = expired;
}
}
package com.lendingcloud.rms.srr;
public class Test {
public static void main(String[] ags){
System.out.println(CacheManager.getSimpleFlag("alksd"));
CacheManager.putCache("abc",new Cache());
CacheManager.putCache("def",new Cache());
CacheManager.putCache("ccc",new Cache());
CacheManager.clearOnly("");
Cache c =new Cache();
for(int i=0;i<10;i++){
CacheManager.putCache(""+i,c);
}
CacheManager.putCache("aaaaaaaa", c);
CacheManager.putCache("abchcy;alskd", c);
CacheManager.putCache("cccccccc", c);
CacheManager.putCache("abcoqiwhcy", c);
System.out.println("删除前的大小:"+CacheManager.getCacheSize());
CacheManager.getCacheALLKey();
CacheManager.clearAll("aaaa");
System.out.println("删除后的大小:"+CacheManager.getCacheSize());
CacheManager.clearAll("1");
System.out.println("删除后的大小:"+CacheManager.getCacheSize());
CacheManager.clearAll("2");
System.out.println("删除后的大小:"+CacheManager.getCacheSize());
CacheManager.getCacheALLKey();
}
}
一、通过文件缓存,顾名思义文件缓存是把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其他文件格式。
二、内存缓存,也就是实现一个类中静态Map。对这个Map进行常规的增删查。
package com.lendingcloud.rms.srr;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
public class CacheManager
{
private static HashMap cacheMap = new HashMap();
//单例构造方法
private CacheManager(){
super();
}
//获取布尔值的缓存
public static boolean getSimpleFlag(String key){
try
{
return (Boolean) cacheMap.get(key);
}
catch (NullPointerException e)
{
return false;
}
}
public static long getServerStarttdt(String key){
try
{
return (Long)cacheMap.get(key);
}
catch (Exception ex)
{
return 0;
}
}
//设置布尔值的缓存
public synchronized static boolean setSimpleFlag(String key,boolean flag){
if(flag&& getSimpleFlag(key)){//加入真不允许被覆盖
return false;
}else{
cacheMap.put(key,flag);
return true;
}
}
public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){
if(cacheMap.get(key)==null){
cacheMap.put(key,serverbegrundt);
return true;
}else{
return false;
}
}
//得到缓存,同步静态方法
private synchronized static Cache getCache(String key){
return (Cache) cacheMap.get(key);
}
//判断是否存在一个缓存
private synchronized static boolean hasCache(String key){
return cacheMap.containsKey(key);
}
//清除所有缓存
public synchronized static void clearAll(){
cacheMap.clear();
}
//清除某一特定缓存,通过遍历HASHMAP下的所有对象,来判断它的key与传入的type是否匹配
public synchronized static void clearAll(String type){
Iterator i=cacheMap.entrySet().iterator();
String key;
ArrayList<String> arr=new ArrayList<String>();
try
{
while(i.hasNext()){
java.util.Map.Entry entry =(java.util.Map.Entry)i.next();
key=(String)entry.getKey();
if(key.startsWith(type)){//如果匹配则删除掉
arr.add(key);
}
}
for(int k=0;k<arr.size();k++){
clearOnly(arr.get(k));
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
//清除指定的缓存
public synchronized static void clearOnly(String key){
cacheMap.remove(key);
}
//载入缓存
public synchronized static void putCache(String key,Cache obj){
cacheMap.put(key,obj);
}
//获取缓存信息
public static Cache getCacheInfo(String key){
if(hasCache(key)){
Cache cache = getCache(key);
if(cacheExpired(cache)){
cache.setExpired(true);
}
return cache;
}else
return null;
}
//载入缓存信息
public static void putCacheInfo(String key,Cache obj,long dt,boolean expired){
Cache cache=new Cache();
cache.setKey(key);
//设置多久之后更新缓存
cache.setTimeOut(dt+System.currentTimeMillis());
cache.setValue(obj);
cache.setExpired(expired);//缓存默认载入时,终止状态为false
cacheMap.put(key,cache);
}
//重写载入缓存信息
public static void putCacheInfo(String key,Cache obj,long dt){
Cache cache =new Cache();
cache.setKey(key);
cache.setTimeOut(dt+System.currentTimeMillis());
cache.setValue(obj);
cache.setExpired(false);
cacheMap.put(key,cache);
}
//判断缓存是否终止
public static boolean cacheExpired(Cache cache) {
if (null == cache) { //传入的缓存不存在
return false;
}
long nowDt = System.currentTimeMillis(); //系统当前的毫秒数
long cacheDt = cache.getTimeOut(); //缓存内的过期毫秒数
if (cacheDt <= 0||cacheDt>nowDt) { //过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE
return false;
} else { //大于过期时间 即过期
return true;
}
}
//获取缓存中的大小
public static int getCacheSize(){
return cacheMap.size();
}
//获取指定类型的大小
public static int getCacheSize(String type){
int k=0;
Iterator i = cacheMap.entrySet().iterator();
String key;
try{
while(i.hasNext()){
java.util.Map.Entry entry =(java.util.Map.Entry)i.next();
key=(String)entry.getKey();
if(key.indexOf(type)!=-1){//如果匹配则删除掉
k++;
}
}
}catch(Exception ex){
ex.printStackTrace();
}
return k;
}
//获取缓存对象中的所有键值名称
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){}finally{
return a;
}
}
//获取缓存对象中指定类型的键值名称、
public static ArrayList<String> getCacheListkey(String type){
ArrayList a = new ArrayList();
String key;
try{
Iterator i =cacheMap.entrySet().iterator();
while(i.hasNext()){
java.util.Map.Entry entry=(java.util.Map.Entry)i.next();
key=(String)entry.getKey();
if(key.indexOf(type)!=-1){
a.add(key);
}
}
}catch(Exception ex){}finally{
return a;
}
}
}
package com.lendingcloud.rms.srr;
public class Cache {
private String key;//缓存ID
private Object value;//缓存数据
private long timeOut;//更新时间
private boolean expired;//是否终止
public Cache(){
super();
}
public Cache(String key,Object value,long timeOut,boolean expired){
this.key=key;
this.value=value;
this.timeOut=timeOut;
this.expired=expired;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public long getTimeOut() {
return timeOut;
}
public void setTimeOut(long timeOut) {
this.timeOut = timeOut;
}
public boolean isExpired() {
return expired;
}
public void setExpired(boolean expired) {
this.expired = expired;
}
}
package com.lendingcloud.rms.srr;
public class Test {
public static void main(String[] ags){
System.out.println(CacheManager.getSimpleFlag("alksd"));
CacheManager.putCache("abc",new Cache());
CacheManager.putCache("def",new Cache());
CacheManager.putCache("ccc",new Cache());
CacheManager.clearOnly("");
Cache c =new Cache();
for(int i=0;i<10;i++){
CacheManager.putCache(""+i,c);
}
CacheManager.putCache("aaaaaaaa", c);
CacheManager.putCache("abchcy;alskd", c);
CacheManager.putCache("cccccccc", c);
CacheManager.putCache("abcoqiwhcy", c);
System.out.println("删除前的大小:"+CacheManager.getCacheSize());
CacheManager.getCacheALLKey();
CacheManager.clearAll("aaaa");
System.out.println("删除后的大小:"+CacheManager.getCacheSize());
CacheManager.clearAll("1");
System.out.println("删除后的大小:"+CacheManager.getCacheSize());
CacheManager.clearAll("2");
System.out.println("删除后的大小:"+CacheManager.getCacheSize());
CacheManager.getCacheALLKey();
}
}
相关文章推荐
- 走进Struts2(一) — Struts2的运行流程及其工作原理
- ubuntu下eclipse的安装
- Eclipse编辑窗口放大缩小的快捷键
- ubuntu下配置java环境
- java高分局之JVM命令参数大全(标准选项)
- Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高
- Spring读取配置文件中的bean与注入后的bean的方法
- 文件上传的三种方式-Java
- Java NIO系列教程(八) SocketChannel
- JAVA并发教程
- JAVA并发教程
- JAVA并发教程
- JAVA并发教程
- JAVA并发教程
- 关于MySQL Java Driver 的 useOldAliasMetadataBehavior
- maven编译java代码报“非法字符: \65279 ”错误的解决方法
- Java NIO系列教程(六) Selector
- java代码性能优化
- java中将param的值自动存到bean中
- Eclipse插件安装