这篇实例中有四个类,分别为
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
4
3
希望本篇文章内容对您有所帮助
本文向大家介绍spring缓存代码详解,包括了spring缓存代码详解的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是spring缓存的相关内容,具体介绍如下。 这篇文章是根据谷歌翻译大致修改出来的,由于原文不知道是什么语,所以可能导致翻译的有错误和不准确的地方,但是大致的方向感觉还是蛮不错的,所以在这里整理了一下,希望能够有所帮助。 高速缓存一直是一个非常需要这两个提高应用程序性能并降
本文向大家介绍Java实现LRU缓存的实例详解,包括了Java实现LRU缓存的实例详解的使用技巧和注意事项,需要的朋友参考一下 Java实现LRU缓存的实例详解 1.Cache Cache对于代码系统的加速与优化具有极大的作用,对于码农来说是一个很熟悉的概念。可以说,你在内存中new 了一个一段空间(比方说数组,list)存放一些冗余的结果数据,并利用这些数据完成了以空间换时间的优化目的,你就已经
本文向大家介绍Java Annotation详解及实例代码,包括了Java Annotation详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 一、Annotation简介 从Java1.5开始,Java增加了元数据(MetaData)的支持,也就是Annotation(注释); Annotation能被用来为程序元素(类、方法、成员变量等)设置元数据; Annotation不能影响程序代
本文向大家介绍java HashMap详解及实例代码,包括了java HashMap详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 java HashMap Map集合的遍历 方式1,根据键查询值 获取所有键的集合 遍历键的集合,获取每一个键 根据键,查询值 方式2,根据键值对的对象查询键和值 获取所有键值对的对象的集合 遍历键值对的对象的集合,获取到每一个键值对的对象 根据键值对的对象
本文向大家介绍Kafka Java Producer代码实例详解,包括了Kafka Java Producer代码实例详解的使用技巧和注意事项,需要的朋友参考一下 根据业务需要可以使用Kafka提供的Java Producer API进行产生数据,并将产生的数据发送到Kafka对应Topic的对应分区中,入口类为:Producer Kafka的Producer API主要提供下列三个方法: p
本文向大家介绍java 实现 stack详解及实例代码,包括了java 实现 stack详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 栈是限制插入和删除只能在一个位置上进行的 List,该位置是 List 的末端,叫做栈的顶(top),对于栈的基本操作有 push 和 pop,前者是插入,后者是删除。 栈也是 FIFO 表。 栈的实现有两种,一种是使用数组,一种是使用链表。 栈的应用 平