缓存可分为二大类:

一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;

二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查.

下面为一个简单的缓存代码

Java代码 :

import java.util.*;

/**

* 可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间

*/

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 getServerStartdt(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 arr = new ArrayList();

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(); //缓存内的过期毫秒数

//过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE

if (cacheDt <= 0||cacheDt>nowDt) {

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 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 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;

}

}

}

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 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;

}

}

//测试类,

class Test {

public static void main(String[] args) {

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.getCacheAllkey();

}

}

java代码中的缓存类怎么找,JAVA缓存的实现 - dreamcloudz的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...

    抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...

  2. java中类型转换的造型_Java-类型转换 - 吉胖子很瘦的个人空间 - OSCHINA - 中文开源技术交流社区...

    类型转换 在实际开发过程中,存在类型转换,类型转换分为两种,自动类型转换和强制类型转换. 自动类型转换 程序编译或运行过程中,jvm可以发生自动类型转换.转换规则: [1]容量小的数据类型可以自动转换 ...

  3. java链表源码_JAVA之链表源码 - 飞翔的南极企鹅的个人空间 - OSCHINA - 中文开源技术交流社区...

    TLinkTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNode class TLinkNode>{ int size = 0; TNode ...

  4. java把abcedf字符串进行排序_字符串合并处理 - 一贱书生的个人空间 - OSCHINA - 中文开源技术交流社区...

    题目描述 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串 ...

  5. zabbix中mysql连不上的排错_zabbix使用排错 - oschina130111的个人空间 - OSCHINA - 中文开源技术交流社区...

    在linux系统中,几乎所有运行的服务都会产生相对就的日志(log),所运行的程序在出错时都会有错误提示,即使没有任何提示也可以通过"echo $"来查看运行是否成功.使用zabb ...

  6. html 中的空格%3c br%3e,URL编码表一览 - frabbit的个人空间 - OSCHINA - 中文开源技术交流社区...

    æ 退格 TAB 换行 回车 空格 ! " # $ % & ' ( ) * + , - . / %00 %01 %02 %03 %04 %05 %06 %07 %08 %09 %0a ...

  7. Html中超链接标记独占一行,html - zlj012607的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.html简介 HTML(Hypertext Marked Language)称为超文本标记语言,是一种标识性的语言. 它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Intern ...

  8. 直白点理解c 语言中的循环体,反射机制 小小谈 - osc_nnbkiac5的个人空间 - OSCHINA - 中文开源技术交流社区...

    反射机制(Reflection) [TOC] 写在前面 本文地址:https://www.cnblogs.com/oberon-zjt0806/p/11082012.html 这里是Oberon 本文 ...

  9. java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充. 它的最主要特点是即定义了调用的规范同时又非常的灵活. 回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event ...

最新文章

  1. 函数的重载 - C++快速入门06
  2. ubuntu平台下搭建PHPWind网站运行环境
  3. 交换机用python定时备份
  4. 调用iOS系统本地相册或摄像头
  5. 黑马程序员—java基础总结1
  6. 成都2021高考二诊成绩查询,成都市2020高三二诊成绩查询
  7. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子
  8. IOS-NSDateFormatter使用介绍
  9. php 的定界符 eof
  10. 算法导论 练习12.1
  11. Qt之进程间通信(Windows消息)
  12. eclipse下maven打包是出现如下错误com.sun.istack.internal不存在
  13. 微信电脑版调整字体大小的办法
  14. CPDA数据分析师:一个完整的数据分析流程
  15. 如何提高工作效率,提高工作效率的方法?
  16. 手写的计算机论文范文,手写2000论文格式模板_科技论文手写格式模板
  17. SEO利器 - 网页内容监控之百度自动推送
  18. 美团技术岗扩招,年薪最高近40万。你有能力进美团吗?
  19. [FLASH]加载外部图片到舞台
  20. C#控制键盘按键的常用方法

热门文章

  1. nginx 监听非标准端口80,重定向端口丢失问题解决
  2. 【报告分享】2021新茶饮研究报告.pdf(附下载链接)
  3. 【白皮书下载】开源生态白皮书(2020年).pdf(附下载链接)
  4. 成像反了_宋国荣, 窦致夏:快速超声 C 扫描成像中的信号频域分析法及其应用...
  5. 机器学习面试问题10
  6. Leetcode每日一题:62.unique-paths(不同路径)
  7. 吴恩达《机器学习》第三章:矩阵和向量
  8. Leetcode每日一题:15.3sum(三数之和)
  9. 花书+吴恩达深度学习(四)多分类 softmax
  10. Pythonic版二分查找