这个真的很牛。几十行代码实现了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); //放入极限池
}
}
分享到:
相关推荐
Ehcache提供了一个简单的API,开发者可以通过添加、删除和查询缓存项来管理数据。它还支持过期策略,例如基于时间或者访问频率的自动清理。 Guava Cache是Google Guava库的一部分,提供了一个更高级的缓存解决方案...
它很可能包含了一个简单的Java缓存实现,可能使用了HashMap或者其他自定义的数据结构来模拟缓存操作。这样的实例通常会包括以下组件: 1. **缓存接口**:定义缓存的基本操作,如put、get、remove和clear。 2. **...
下面是一个简单的字符串缓存类实现示例,我们将称之为`StringCache`: ```java public class StringCache { private static final int CAPACITY = 100; // 缓存容量 private Map, String> cache = new HashMap...
这个配置定义了一个名为`exampleCache`的缓存区域,最大内存中元素数量为1000,非永久性缓存,元素空闲120秒后过期,存活120秒后过期,数据存储在系统临时目录。 四、Ehcache API使用 1. **创建缓存管理器**: ```...
这可以通过添加`@EnableCaching`注解到一个配置类来实现。这个注解会开启缓存注解的处理,使我们可以在方法上使用`@Cacheable`、`@CacheEvict`等注解。 2. **配置缓存**: 需要在Spring配置中声明所使用的缓存 ...
Java缓存技术在企业级开发中扮演着至关重要的角色,主要目的是提高系统性能,减少不必要的计算和I/O操作。本文将深入探讨缓存的概念、作用、类型以及在Java环境下的应用。 缓存,简单来说,就是高速缓冲存储器,它...
Cache 缓存类存放缓存id 缓存更新时间 缓存资源(object)缓存是否可用 CacheManager 缓存管理类有缓存各种操作的方法 以上两个为主要类 下面为测试类 TestCache main方法测试缓存 TestBo 需要存入缓存的资源
在高级选项中,还可以配置更多关于Java缓存的设置,比如缓存大小、更新策略等。 总的来说,理解并掌握如何管理Java Applet缓存对于开发者来说至关重要,尤其是在迭代开发和调试过程中,能够及时清除缓存以确保始终...
总的来说,Java缓存的应用是提升系统性能的关键策略之一。了解Java内存体系和有效使用缓存框架,能够帮助开发者创建更高效、更稳定的系统,同时避免因内存管理不当导致的问题。正确设置JVM内存参数和使用内存检查...
`CacheOperation` 类还实现了单例模式,确保全局只有一个实例存在,保证了缓存管理的一致性。通过 `getInstance()` 方法获取单例实例。 `addCacheData()` 方法用于添加缓存数据,接受一个键和数据对象作为参数。这...
Ehcache是由Terracotta公司开发的一个开源的、高性能的Java缓存解决方案。它支持内存和磁盘存储,以及分布式缓存模式,适用于大型分布式系统。Ehcache的核心概念包括缓存、缓存区域(Cache)、元素(Element)和缓存...
CacheManager 类是一个简单的缓存管理器,它使用 HashMap 来存储缓存对象。 CacheManager 类提供了多种方法来操作缓存,例如获取缓存对象、设置缓存对象、清除缓存对象等。 1. 获取缓存对象: CacheManager 类提供...
在Java中,你可以创建一个`HashMap`,然后使用`Jedis.hset()`方法将数据存储到Redis。例如: ```java Map, String> myMap = new HashMap(); myMap.put("key1", "value1"); myMap.put("key2", "value2"); ...
Ehcache是一个开源的、高性能的、易于使用的Java缓存框架,主要用于提高应用程序的性能。Ehcache支持将数据缓存在内存中或磁盘上,从而减少对底层数据源的访问频率,减轻数据库的压力。 ##### 1. Ehcache的基本概念...
### Java缓存框架EhCache的关键知识点 #### 一、EhCache简介 EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点。它是Hibernate中默认的CacheProvider之一,广泛应用于各种Java应用中以提高性能和响应...
根据提供的文件信息,我们可以深入分析该Java缓存设计代码中的关键知识点。 ### 一、类结构及作用 #### CacheManager 类 - **包名**: `lhm.hcy.guge.frameset.cache`,这表明该类属于一个较大的项目或框架的一部分...
本项目提供了一个Java实现的Redis缓存工具类,结合SSM框架,可以帮助开发者快速地集成和管理Redis缓存。 首先,让我们了解一下Java中的SSM框架: 1. **Spring**:这是一个全面的开源应用框架,提供了依赖注入(DI)...
在Java世界里,缓存机制是一个重要的设计模式,广泛应用于各种场景,如Web应用、大数据处理、分布式系统等。 `SimpleCache`的设计思想简洁易用,通常由一个Key-Value结构组成,其中Key用于标识存储的数据,Value则...
- **Java缓存框架**:在Java环境中,缓存框架如osCache提供了一套完整的解决方案,帮助开发者轻松集成和管理缓存。 2. **osCache的核心功能** - **对象缓存**:osCache允许开发者将Java对象直接放入缓存,便于...