`

一个非常简单的java缓存管理类

 
阅读更多
这个真的很牛。几十行代码实现了java的缓存全部采用jdk的类。
package com.test.cache;

import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public final class SimpleCacheMy<K,V> {
private Lock lock = new ReentrantLock(); //该锁功能类似于synchronized不过比synchronized更强大,效率更高
private final int maxCapacity; //最大容量
//采用map结构存储数据
private final Map<K,V> emap; //极限池
private final Map<K,V> lmap;  //缓存池

public SimpleCacheMy(int maxCapacity){
this.maxCapacity = maxCapacity;  //设置最大容量
/*
* ConcurrentHashMap该类是线程安全的一个map,效率比hashtable高
* 该类的实现原理是切割成多个小map,然后在需要同步的地方同步
* */
emap = new ConcurrentHashMap<K,V>(maxCapacity);
/*
* WeakHashMap 内部采用引用机制来改变自身存储的对象
* 如果发现对象不再被引用了该类会清楚该对象,这样缓存用该类实现可以不用考虑清除机制的问题。
* */
lmap  = new WeakHashMap<K,V>(maxCapacity);
}

public  V get(K k){
V v = emap.get(k); //先从极限池取
if(v==null){ //没取到 然后从缓存池中取,因为lmap是线程不安全的,所以要进行同步。
try{
lock.lock(); 
v = lmap.get(k); //从缓存池中取
}catch(Exception e){

}finally{
lock.unlock(); //注意使用lock进行同步一定要用try catch代码块,在finally中释放
}
if(v!=null){
emap.put(k, v); //如果找到了,从缓存池中放入极限池。
}
}

return v;
}

public void put(K k,V v){
if(emap.size()>=maxCapacity){ //如果此时极限池装满了就往缓存池里面装
try{
lock.lock();
lmap.putAll(emap);
}catch(Exception e){}finally{
lock.unlock();
}

emap.clear();  //清空极限池
}
emap.put(k, v); //放入极限池
}
}
分享到:
评论

相关推荐

    java缓存经典实例

    Cache 缓存类存放缓存id 缓存更新时间 缓存资源(object)缓存是否可用 CacheManager 缓存管理类有缓存各种操作的方法 以上两个为主要类 下面为测试类 TestCache main方法测试缓存 TestBo 需要存入缓存的资源

    使用Java强引用和垃圾回收实现一个简单的缓存系统.txt

    这段代码实现了一个简单的缓存系统Cache,其中使用了Java的强引用和垃圾回收机制。在类的构造方法中,首先创建了一个Map对象和一个List对象分别用于存储缓存的数据和记录所有的键。然后实现了两个方法:put()和get()...

    Java课程实验 Spring Boot 缓存管理

    创建一个继承自org.springframework.cache.annotation.CachingConfigurerSupport的配置类,并重写其中的cacheManager()方法。 3.使用缓存注解: 在需要进行缓存的方法上添加缓存注解。例如,使用@Cacheable注解来...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包11

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包6

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包9

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包4

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包101

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    Java教务管理系统源码 springboot教务系统源码

    Java教务管理系统源码 springboot教务系统源码 功能介绍: 校区管理 班级管理 学生管理 满意度管理 数据汇总 知识管理 总部督查 系统监控 系统工具 系统管理 后台:SpringBoot2.x + MyBatis3.x + Shiro1.4 + ...

    java开源包5

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包8

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包10

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    SpringBoot开发非常美观的java博客系统(包含后台管理功能)

    SpringBoot开发非常美观的java博客系统(包含后台管理功能)SpringBoot开发非常美观的java博客系统(包含后台管理功能) 技术选型: JDK8 数据库MySQL 主框架 (Spring-boot、Spring-data-jpa) 安全权限 Shiro 搜索...

    java开源包1

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包3

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    Java 两级缓存框架,可以让应用支持两级缓存框架.zip

    java 简单性 Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般...在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。

    java开源包2

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

Global site tag (gtag.js) - Google Analytics