package com.cache;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/***
* 简单的缓存池实现
* @author jianghl
*
*/
public class SampleCachePool {
private static SampleCachePool instance = null;
private Map pool;
private SampleCachePool() {
pool = new HashMap();
}
public synchronized static SampleCachePool getInstance() {
if (instance == null) {
instance = new SampleCachePool();
}
return instance;
}
public synchronized void clearAllCacheContainer() {
pool.clear();
}
public synchronized CacheContainer getCacheContainer(String name,
boolean autoCreate) {
if (pool.containsKey(name)) {
return (CacheContainer) pool.get(name);
} else if (autoCreate) {
CacheContainer container = new CacheContainer();
pool.put(name, container);
return container;
} else {
return null;
}
}
public synchronized CacheContainer getCacheContainer(String name) {
return getCacheContainer(name, false);
}
public class CacheContainer {
Map context = new HashMap();
public Object getContent(String name) {
if (!context.containsKey(name)) {
return null;
}
CacheItem item = (CacheItem) context.get(name);
if (item.isExpired()) {
return null;
} else {
return item.getEntity();
}
}
public void putContent(String name, Object obj, long expires) {
if (!context.containsKey(name)) {
context.put(name, new CacheItem(obj, expires));
return;
}
CacheItem item = (CacheItem) context.get(name);
item.setUpdateTime(new Date());
item.setExpireTimes(expires);
item.setEntity(obj);
}
public void putContent(String name, Object obj) {
putContent(name, obj, -1);
}
private class CacheItem {
private Date createTime = new Date();
private Date updateTime = new Date();
private long expireTimes = -1;
private Object entity = null;
public CacheItem(Object obj, long expires) {
entity = obj;
expireTimes = expires;
}
public boolean isExpired() {
return (expireTimes != -1 && new Date().getTime()
- updateTime.getTime() > expireTimes);
}
public String toString() {
return entity.toString();
}
public Date getCreateTime() {
return createTime;
}
public Object getEntity() {
return entity;
}
public Date getUpdateTime() {
return updateTime;
}
public void setCreateTime(Date date) {
createTime = date;
}
public void setEntity(Object object) {
entity = object;
}
public void setUpdateTime(Date date) {
updateTime = date;
}
public long getExpireTimes() {
return expireTimes;
}
public void setExpireTimes(long l) {
expireTimes = l;
}
}
}
}
相关推荐
java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现。
本文将深入探讨Unity中的对象缓存池及其实现方式,主要关注名为"PoolManager"的组件。 首先,对象缓存池的基本原理是预先创建一组游戏对象,当需要使用这些对象时,而不是每次都在运行时创建新的实例,而是从池中...
常见的数据库缓存池实现有Apache的DBCP、C3P0以及HikariCP等。这些组件能够预先创建并维护一定数量的数据库连接,当JSP需要访问数据库时,可以从池中获取一个已建立的连接,使用完毕后归还,而非关闭。这种机制减少...
在AS3的对象池实现中,工厂方法可以用于创建池中的对象。通过定义一个抽象工厂类,然后让具体对象的类继承并实现这个抽象工厂,我们可以确保所有的对象都按照统一的规则创建。这样,`ObjectPool`类只需要知道如何...
在缓存池的实现中,我们可以使用多个缓存池来缓存磁盘中的页,这样可以减少锁的争用,因为在做这种优化之前,内存中只有一个缓存池,线程在读写缓存池数据时要先获取缓存池的锁,使用多个缓存池可以减少锁的争用。...
总的来说,Java连接池是提高数据库应用性能的重要工具,通过合理配置和选择合适的连接池实现,我们可以有效地管理和利用数据库连接,减少系统资源的消耗,提升整体系统的响应速度和稳定性。对于开发者来说,理解和...
Guava cache 模块提供了许多有用的特性,如自动加载、缓存池大小限制、缓存项过期时间设置、缓存项移除监听器等。 二、LoadingCache 简介 LoadingCache 是 Guava 库提供的一种缓存实现方式,继承自 Cache 接口。...
总结起来,"4.mysql dbutils c3p0 缓存池工具类"这个主题涉及了如何在Java项目中使用MySQL数据库,以及如何通过DBUtils和C3P0来简化数据库操作和管理数据库连接。DBUtils提供了一套实用的数据库操作API,而C3P0则...
为了优化这个内存池实现,可以考虑以下策略: - **内存块大小的调整**: 分析程序中不同大小的内存请求,优化内存块的大小,以减少浪费并提高空间利用率。 - **动态扩展**: 当一级内存池或二级内存池中的内存耗尽时...
对象池管理器是一种在软件开发中常见的优化技术,特别是在资源密集型或性能敏感的应用中,如游戏...在实际应用中,开发者需要根据具体业务需求选择合适的对象池实现,并对其进行适当的配置和优化,以达到最佳的效果。
本文将深入讲解如何使用Java实现一个简单的缓存池,并通过一个具体的代码实例来阐述其工作原理。 首先,我们来看缓存实体类(CacheItem)。这个类是用来存储缓存数据的容器,包含以下关键属性和方法: 1. `...
【Integer缓存池案例1】 在Java编程中,Integer对象的使用涉及到缓存池的概念。Integer类在JDK中提供了缓存机制,用于优化Integer对象的创建和使用,特别是对于小数值。当我们在程序中创建Integer对象时,如果值在-...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...基于SSM框架实现的高并发商品秒杀系统源码+项目说明(c3p0作为连接池,Redis为缓存实现高并发 ,同时通过MySQL优化降低了网络延迟与GC的影响).zip
本文将深入探讨OkHttp中的连接池实现,包括连接对象的添加、移除机制以及其工作原理。 首先,我们需要了解什么是连接池。连接池是一种资源管理技术,用于存储和管理预先建立的网络连接,避免每次请求都创建新的TCP...
使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...
本文将深入探讨基于Redis的UniEAP缓存实现,如何使用Redis替换原有的Ehcache缓存,并讨论相关的优势和注意事项。 首先,让我们了解一下 UniEAP 开发平台。UniEAP 是一个企业级应用开发框架,它提供了丰富的功能模块...
在数据库系统中,内存池用于存储查询结果或缓存,提高了查询速度。 总的来说,内存池是提高程序性能和稳定性的重要工具。通过合理设计和实现内存池,开发者可以有效地管理内存,减少系统调用的开销,提高系统的响应...
Java连接池实现是一种高效管理数据库连接的技术,它允许应用程序重复使用已经建立的数据库连接,而不是每次需要时都创建新的连接。这大大降低了系统的资源消耗,提高了应用的性能和响应速度。连接池的基本思想是初始...
以下是一个简单的对象池实现示例代码片段: ```java public class ObjectPool { private int numObjects = 10; // 对象池的初始大小 private int maxObjects = 50; // 对象池的最大大小 private Vector...