`

简单的缓存池实现

 
阅读更多

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缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现。

    [Unity]对象缓存池PoolManager.rar

    本文将深入探讨Unity中的对象缓存池及其实现方式,主要关注名为"PoolManager"的组件。 首先,对象缓存池的基本原理是预先创建一组游戏对象,当需要使用这些对象时,而不是每次都在运行时创建新的实例,而是从池中...

    用数据库缓存池和dwr实现的jsp程序

    常见的数据库缓存池实现有Apache的DBCP、C3P0以及HikariCP等。这些组件能够预先创建并维护一定数量的数据库连接,当JSP需要访问数据库时,可以从池中获取一个已建立的连接,使用完毕后归还,而非关闭。这种机制减少...

    对象缓存池AS3实现

    在AS3的对象池实现中,工厂方法可以用于创建池中的对象。通过定义一个抽象工厂类,然后让具体对象的类继承并实现这个抽象工厂,我们可以确保所有的对象都按照统一的规则创建。这样,`ObjectPool`类只需要知道如何...

    Lec05_缓存池1

    在缓存池的实现中,我们可以使用多个缓存池来缓存磁盘中的页,这样可以减少锁的争用,因为在做这种优化之前,内存中只有一个缓存池,线程在读写缓存池数据时要先获取缓存池的锁,使用多个缓存池可以减少锁的争用。...

    Java 连接池实现

    总的来说,Java连接池是提高数据库应用性能的重要工具,通过合理配置和选择合适的连接池实现,我们可以有效地管理和利用数据库连接,减少系统资源的消耗,提升整体系统的响应速度和稳定性。对于开发者来说,理解和...

    如何基于LoadingCache实现Java本地缓存

    Guava cache 模块提供了许多有用的特性,如自动加载、缓存池大小限制、缓存项过期时间设置、缓存项移除监听器等。 二、LoadingCache 简介 LoadingCache 是 Guava 库提供的一种缓存实现方式,继承自 Cache 接口。...

    4.mysql dbutils c3p0 缓存池工具类

    总结起来,"4.mysql dbutils c3p0 缓存池工具类"这个主题涉及了如何在Java项目中使用MySQL数据库,以及如何通过DBUtils和C3P0来简化数据库操作和管理数据库连接。DBUtils提供了一套实用的数据库操作API,而C3P0则...

    一个C++内存池实现

    为了优化这个内存池实现,可以考虑以下策略: - **内存块大小的调整**: 分析程序中不同大小的内存请求,优化内存块的大小,以减少浪费并提高空间利用率。 - **动态扩展**: 当一级内存池或二级内存池中的内存耗尽时...

    对象池管理器(项目中中剥离出的)

    对象池管理器是一种在软件开发中常见的优化技术,特别是在资源密集型或性能敏感的应用中,如游戏...在实际应用中,开发者需要根据具体业务需求选择合适的对象池实现,并对其进行适当的配置和优化,以达到最佳的效果。

    Java缓存池代码实例详解

    本文将深入讲解如何使用Java实现一个简单的缓存池,并通过一个具体的代码实例来阐述其工作原理。 首先,我们来看缓存实体类(CacheItem)。这个类是用来存储缓存数据的容器,包含以下关键属性和方法: 1. `...

    Integer缓存池案例1

    【Integer缓存池案例1】 在Java编程中,Integer对象的使用涉及到缓存池的概念。Integer类在JDK中提供了缓存机制,用于优化Integer对象的创建和使用,特别是对于小数值。当我们在程序中创建Integer对象时,如果值在-...

    基于SSM框架实现的高并发商品秒杀系统源码+项目说明(c3p0作为连接池,Redis为缓存实现高并发 ).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...基于SSM框架实现的高并发商品秒杀系统源码+项目说明(c3p0作为连接池,Redis为缓存实现高并发 ,同时通过MySQL优化降低了网络延迟与GC的影响).zip

    okhttp中连接池实现

    本文将深入探讨OkHttp中的连接池实现,包括连接对象的添加、移除机制以及其工作原理。 首先,我们需要了解什么是连接池。连接池是一种资源管理技术,用于存储和管理预先建立的网络连接,避免每次请求都创建新的TCP...

    SpringBoot2.2+commons-pool2实现多Ftp连接池完整项目,开箱即用,经过长期生产使用稳定可靠

    使用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的UniEAP缓存实现,如何使用Redis替换原有的Ehcache缓存,并讨论相关的优势和注意事项。 首先,让我们了解一下 UniEAP 开发平台。UniEAP 是一个企业级应用开发框架,它提供了丰富的功能模块...

    内存池实现源码

    在数据库系统中,内存池用于存储查询结果或缓存,提高了查询速度。 总的来说,内存池是提高程序性能和稳定性的重要工具。通过合理设计和实现内存池,开发者可以有效地管理内存,减少系统调用的开销,提高系统的响应...

    java连接池实现

    Java连接池实现是一种高效管理数据库连接的技术,它允许应用程序重复使用已经建立的数据库连接,而不是每次需要时都创建新的连接。这大大降低了系统的资源消耗,提高了应用的性能和响应速度。连接池的基本思想是初始...

    Java对象池技术的原理及其实现

    以下是一个简单的对象池实现示例代码片段: ```java public class ObjectPool { private int numObjects = 10; // 对象池的初始大小 private int maxObjects = 50; // 对象池的最大大小 private Vector...

Global site tag (gtag.js) - Google Analytics