java缓存有很多种实现方式,
最简单的无非就是static HashMap显然是基于内存缓存,一个map就可以搞定引用对象的缓存,最简单也最不实用,首要的问题就是保存对象的有效性以及周期无法控制,这样很容易就导致内存急剧上升,周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行,这三种都是弱引用,区别在于强度不同,弱引用对象的生命周期与JVM挂钩,JVM内存不够了就回收,这样能很好的控制OutOfMemoryError异常。
例如代码:
public class SingletonMap { //一个本地的缓存Map private Map localCacheStore = new HashMap(); //一个私有的对象,非懒汉模式 private static SingletonMap singletonMap = new SingletonMap(); //私有构造方法,外部不可以new一个对象 private SingletonMap(){ } //静态方法,外部获得实例对象 public static SingletonMap getInstance(){ return singletonMap; } //获得缓存中的数据 public Object getValueByKey(String key){ return localCacheStore.get(key); } //向缓存中添加数据 public void putValue(String key , Object value){ localCacheStore.put(key, value); } }
缺点:
1、 没有缓存大小的设置,无法限定缓存体的大小以及存储数据的限制(max size limit);
2、 没有缓存的失效策略(eviction policies);
3、 没有弱键引用,在内存占用吃紧的情况下,JVM是无法回收的(weak rererences keys);
4、 没有监控统计(statistics);
5、 持久性存储(persistent store);
集群内部,缓存的一致性如何保证?
如果采用ehcache的话,可以使用框架本身的JGroup来实现组内机器之间的缓存同步。
如果是采用google的cacheBuilder的话,需要自己实现缓存的同步。
A、非实时生效数据:数据的更新不会时时发生,应用启动的时候更新即可,然后定时程序定时去清理缓存;
B、需要实时生效数据:启动时可预热也可不预热,但是缓存数据变更后,集群之间需要同步
相关推荐
1. 不能进行大量数据存储:本地缓存占用了应用进程的内存空间,比如 Java 进程的 JVM 内存空间,故不能进行大数据量存储。 2. 集群部署,数据可能存在不一致:需要应用服务保证数据一致性。 3. 应用重启,缓存数据...
Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速访问频繁使用的数据,从而提高整体性能和响应速度。 ### 1. Ehcache 基本概念 - **Cache**: 缓存是存储数据的临时区域,用于快速...
JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分进行详细介绍。 #### 二、程序计数器 程序计数器是一...
Ehcache 是一个广泛使用的开源缓存解决方案,支持本地缓存和分布式缓存。Guava Cache 是 Google Guava 库的一部分,提供了简单的缓存接口,适用于简单的缓存需求。Spring Cache 是 Spring 框架的一部分,提供了一种...
1. **提高应用的可用性和性能**:通过缓存常用的数据对象,减少对数据库的直接访问次数,从而降低数据库负载,提高系统整体的响应时间和处理能力。 2. **确保数据一致性**:JBoss Cache可以确保缓存中的数据状态与...
5. `oscache-2.4.1.jar` 是一个开源的缓存框架,提供了本地缓存和分布式缓存功能,可能在这个项目中用于辅助实现LRU缓存。 6. `commons-logging-1.1.jar` 是Apache Commons Logging库,它是一个日志抽象层,允许在...
GuavaCache是常用的本地缓存实现,具有轻量、易用等特点,并提供了多种被动更新机制: - `expireAfterAccess`:如果缓存项在设定时间内未被读或写,将被回收。 - `expireAfterWrite`:缓存项在设定时间内未被更新,...
基本缓存的使用可能涉及简单的数据结构如HashMap或ConcurrentHashMap,用于临时存储常用的数据。随着应用复杂性的增加,开发者可能会转向使用专业的缓存框架,如 Ehcache、Guava Cache 或 Redis,这些框架提供更高级...
- **本地缓存**:如使用Java的HashMap或ConcurrentHashMap,存储在JVM内存中。 - **分布式缓存**:如Redis、Memcached,支持多服务器间的共享缓存。 - ** EhCache**:一种流行的企业级缓存解决方案,提供本地缓存...
8. **缓存预热**:在系统启动时预先加载常用数据到缓存,以提供更快的服务响应。 9. **缓存监控与调优**:持续监控缓存的性能,根据实际情况调整缓存参数,例如缓存的大小、过期策略等。 设计一个良好的Java缓存...
- 本地缓存:存储在应用服务器的内存中,访问速度快,但不共享。 - 远程缓存:可能位于网络上的另一台服务器,可多节点共享,但网络通信可能增加延迟。 二. iBATIS高速缓存介绍 2.1 iBATIS高速缓存的关注点: ...
1. **本地缓存**:如Java的`WeakHashMap`、`SoftReference`等,通常用于单个JVM内部,适用于小规模的数据存储。 2. **分布式缓存**:如Hazelcast、Infinispan、Ehcache和广为人知的Apache Ignite,适用于多节点环境...
4. **SpringBoot**:SpringBoot简化了Spring应用的初始搭建和配置工作,它集成了大量常用的第三方库,如数据源、定时任务、缓存等。掌握SpringBoot意味着要理解起步依赖、自动配置、健康检查、Actuator监控、微服务...
2. **本地磁盘缓存**:当内存中的缓存数据达到预设限制时,JCS 可以将数据写入到本地磁盘,以实现持久化存储。 3. **分布式缓存**:支持分布式缓存模式,允许多个节点共享同一份缓存,提高系统的可扩展性。 4. **LRU...
常用的JVM监控工具包括VisualVM、JConsole、JProfiler等。这些工具可以帮助开发者监控JVM的各个方面,比如CPU使用率、内存使用情况、线程信息、垃圾回收频率等。通过这些工具,开发者可以实时了解应用程序的运行状况...
3. 本地方法栈(Native Method Stack)是为执行本地方法(即非Java实现的方法)服务的,与Java栈类似。 4. 堆(Heap)是线程共享的内存区域,是垃圾回收的主要区域,存储对象实例。 5. 方法区(Method Area)同样是...
- **本地方法栈(Native Method Stack)**:服务于Java虚拟机调用的本地方法(C或C++实现)。 - **程序计数器(Program Counter Register)**:记录当前线程执行的字节码指令的地址。 2. **Java内存模型(JMM,...
JVM的内存模型包括堆、栈、方法区、程序计数器和本地方法栈。其中,堆内存存放对象实例,栈内存处理方法调用。垃圾回收(GC)是JVM自动管理内存的一部分,用于回收不再使用的对象所占用的空间,防止内存泄漏。GC算法...