Java缓存池代码实例详解

发布时间 - 2026-01-11 00:44:28    点击率:

这篇实例中有四个类,分别为

CacheItem  缓存实体类

CachePool  缓存池

Student  学生实体类

MainTest  主测试类

其中,缓存实体类CacheItem  中存放管理学生实体对象Student  ,缓存实体类CacheItem  存放在缓存池CachePool  中,MainTest  主要负责整体的测试工作。

缓存实体类

package com.paic.zhangqi.cache;  
import java.util.Date; 
 
/** 
 * 缓存实体 
 * @author ZHANGQI947 
 */ 
public class CacheItem {  
 // 创建缓存时间 
 private Date createTime = new Date();   
 // 缓存期满时间 
 private long expireTime = 1;   
 // 缓存实体 
 private Object entity;    
 public CacheItem(Object obj, long expires) { 
  this.entity = obj; 
  this.expireTime = expires; 
 }   
 // 判断缓存是否超时 
 public boolean isExpired() { 
  return (expireTime != -1 && new Date().getTime() - createTime.getTime() > expireTime); 
 }  
 public Date getCreateTime() { 
  return createTime; 
 }  
 public void setCreateTime(Date createTime) { 
  this.createTime = createTime; 
 }  
 public Object getEntity() { 
  return entity; 
 }  
 public void setEntity(Object entity) { 
  this.entity = entity; 
 }  
 public long getExpireTime() { 
  return expireTime; 
 }  
 public void setExpireTime(long expireTime) { 
  this.expireTime = expireTime; 
 } 
} 

缓存池CachePool

package com.paic.zhangqi.cache;  
import java.util.Date; 
import java.util.HashMap; 
import java.util.Map; 
/** 
 * 缓存池 
 * @author Administrator 
 */ 
public class CachePool { 
 // 缓存池唯一实例 
 private static CachePool instance; 
 // 缓存Map 
 private static Map<String, Object> cacheItems;   
 private CachePool() { 
  cacheItems = new HashMap<String, Object>(); 
 }   
 /** 
  * 获取唯一的实例 
  * @return instance 
  */ 
 public synchronized static CachePool getInstance() { 
  if (instance == null) { 
   instance = new CachePool(); 
  } 
  return instance; 
 }   
 /** 
  * 清除所有的Item缓存 
  */ 
 public synchronized void clearAllItems() { 
  cacheItems.clear(); 
 }   
 /** 
  * 获取缓存实例 
  * @param name 缓存名称 
  * @return 缓存实例 
  */ 
 public synchronized Object getCacheItem(String name) { 
  if (!cacheItems.containsKey(name)) { 
   return null; 
  } 
  CacheItem cacheItem = (CacheItem) cacheItems.get(name); 
  if (cacheItem.isExpired()) { 
   return null; 
  } 
  return cacheItem.getEntity(); 
 } 
 /** 
  * 存放缓存信息 
  * @param name 名称 
  * @param obj 实例对象 
  * @param expires 超时时长 
  */ 
 public synchronized void putCacheItem(String name, Object obj, long expires) { 
  // 判断该对象是否在在缓存池,不在直接put 
  if (!cacheItems.containsKey(name)) { 
   cacheItems.put(name, new CacheItem(obj, expires)); 
  } 
  // 获取缓存池中对象,更新对象信息 
  CacheItem cacheItem = (CacheItem) cacheItems.get(name); 
  cacheItem.setCreateTime(new Date()); 
  cacheItem.setEntity(obj); 
  cacheItem.setExpireTime(expires); 
 } 
 /** 
  * 移除缓存数据 
  * @param name 
  */ 
 public synchronized void removeCacheItem(String name) { 
  if (!cacheItems.containsKey(name)) { 
   return ; 
  } 
  cacheItems.remove(name); 
 }   
 /** 
  * 获取缓存数据的数量 
  * @return 
  */ 
 public int getSize() { 
  return cacheItems.size(); 
 }  
} 

学生类Student

package com.paic.zhangqi.cache; 
/** 
 * 学生类 
 * @author Administrator 
 */ 
public class Student {  
 private String name; 
 private String id; 
 private int age; 
 private int sal; 
 public Student() { 
   
 }   
 public Student(String name, String id, int age, int sal) { 
  this.name = name; 
  this.id = id; 
  this.age = age; 
  this.sal = sal; 
 }  
 public String getName() { 
  return name; 
 }  
 public void setName(String name) { 
  this.name = name; 
 }  
 public String getId() { 
  return id; 
 }  
 public void setId(String id) { 
  this.id = id; 
 }  
 public int getAge() { 
  return age; 
 }  
 public void setAge(int age) { 
  this.age = age; 
 }  
 public int getSal() { 
  return sal; 
 } 
 public void setSal(int sal) { 
  this.sal = sal; 
 } 
}

主测试类MainTest

package com.paic.zhangqi.cache; 
/** 
 * 主测试类 
 * @author ZHANGQI947 
 */ 
public class MainTest { 
 
 /** 
  * @param args 
  * @throws InterruptedException 
  */ 
 public static void main(String[] args) throws InterruptedException { 
  // 获取缓存池 
  CachePool cachePool = CachePool.getInstance();    
  Student stu1 = new Student("l1", "stu001", 25, 40); 
  Student stu2 = new Student("l2", "stu002", 25, 40); 
  Student stu3 = new Student("l3", "stu003", 25, 40); 
  Student stu4 = new Student("l4", "stu004", 25, 40);    
  cachePool.putCacheItem("001", stu1, 122222); 
  cachePool.putCacheItem("002", stu2, 10); 
  cachePool.putCacheItem("003", stu3, 360002); 
  cachePool.putCacheItem("004", stu4, 1222222);    
  // 设置线程休眠,其中002对象会超时 
  Thread.sleep(200);    
  Student stu001 = (Student) cachePool.getCacheItem("001"); 
  if (null != stu001) { 
   System.out.println(stu001.getName()); 
  }    
  // 由于超时,这里取出的002对象为null 
  Student stu002 = (Student) cachePool.getCacheItem("002"); 
  if (null != stu002) { 
   System.out.println(stu002.getName()); 
  }    
  // 获取打印缓存池中对象数量 
  int cacheSize = cachePool.getSize(); 
  System.out.println(cacheSize);    
  // 删除对象002 
  cachePool.removeCacheItem("002");   
  // 打印缓存池数量 
  cacheSize = cachePool.getSize(); 
  System.out.println(cacheSize); 
 } 
} 

测试结果

l1 

3

希望本篇文章内容对您有所帮助


# Java缓存池代码实例  # Java缓存代码实例  # Java缓存  # Java本地缓存的实现代码  # Java中LocalCache本地缓存实现代码  # Java客户端利用Jedis操作redis缓存示例代码  # java中对Redis的缓存进行操作的示例代码  # Java代码读取文件缓存问题解决  # Java基于LoadingCache实现本地缓存的示例代码  # java性能优化之代码缓存优化  # 实体类  # 池中  # 放在  # 中有  # 分别为  # 这篇  # 对您  # 时长  # 移除  # amp  # return  # getTime  # void  # getCreateTime  # gt  # entity  # Object  # expireTime  # obj  # isExpired 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 浅谈javascript alert和confirm的美化  历史网站制作软件,华为如何找回被删除的网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何有效防御Web建站篡改攻击?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  图册素材网站设计制作软件,图册的导出方式有几种?  如何在万网利用已有域名快速建站?  Swift中switch语句区间和元组模式匹配  如何快速启动建站代理加盟业务?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel如何使用.env文件管理环境变量?(最佳实践)  bing浏览器学术搜索入口_bing学术文献检索地址  Android利用动画实现背景逐渐变暗  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Laravel模型事件有哪些_Laravel Model Event生命周期详解  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何用花生壳三步快速搭建专属网站?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何在局域网内绑定自建网站域名?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何批量查询域名的建站时间记录?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Java解压缩zip - 解压缩多个文件或文件夹实例  黑客如何利用漏洞与弱口令入侵网站服务器?  如何在景安云服务器上绑定域名并配置虚拟主机?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  长沙企业网站制作哪家好,长沙水业集团官方网站?  什么是javascript作用域_全局和局部作用域有什么区别?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Java类加载基本过程详细介绍  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel中的Facade(门面)到底是什么原理  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  如何用免费手机建站系统零基础打造专业网站?  手机网站制作与建设方案,手机网站如何建设?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  北京的网站制作公司有哪些,哪个视频网站最好?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】