一般是采用HashMap来作为缓存的存储结构,但Java没有全局变量的概念,怎么保证缓存中的数据不被垃圾回收器收集,而造成数据的丢失呢?
请问一般的缓存是怎样保证数据的独立性(即脱离垃圾回收器)的?
做一个判断,HashMap取不到值就到数据库里再读数据
系统第一次起来,或是第一次取数据后将数据
保存在一个static的Map里即可,凡是缓存的东西
总是经常用到的,所以一般是保持强引用,GC应该
会清理
(1)jive[Jive 是一个开放的 Java 源代码项目。其目标是建设一个开放结构的,强壮的,易于扩展的基于 JSP 的 论坛。]里面,是使用单态模式维护一个工厂实例,做为程序的入口,就是无论有多少个在线用户,都只要从该入口进入.在这个工厂实例中,有一个缓存管理类(DatabaseCacheManager)变量,这个类有几个公有变量,如DbUserCache(就是缓存访问过的用户)等.当要获取一个user的用户信息时,它就会先在DbUserCache中查找,如果找不到,那么就从数据库中读取,再放入缓存中.
singleton模式:
public class DataCache {
protected static final HashMap map = new HashMap(); // Cache table
private static final Object lock = new Object();
private DataCache() {} // 防止在外部实例化
public static Object getData(Object key) {
Object v = map.get(key);
if (v == null) {
synchronized(lock) {
v = map.get(key); // Check again to avoid re-load
if (v == null) loadDataSource(key);
v = map.get(key); // retrieves data.
}
}
return v;
}
/*
*Load data from data source.
*/
protected static synchronized void loadDataSource(Object key) {
Object value = new Object(); // Load value from data source
map.put(key, value);
}
}
分享到:
相关推荐
Java利用ConcurrentHashMap实现本地缓存demo; 基本功能有缓存有效期、缓存最大数、缓存存入记录、清理线程、过期算法删除缓存、LRU算法删除、获取缓存值等功能。 复制到本地项目的时候,记得改包路径哦~
java Map实现的cache manager,定时清除缓存里面的值,使数据一致保持最新
主要介绍了java使用hashMap缓存保存数据的方法,结合实例形式简单分析了java基于hashmap读写缓存数据的相关操作技巧,需要的朋友可以参考下
LRU缓存HashMap+双向链表实现,java版本,导入即用
HashMap重写实现 轻量级实现 使用自定义的轻量对象HashObjectMap替代jdk的HahMap HashMap里的Entry占用较大内存,可以用自己实现的轻量级容器替换,步骤如下: 1、 缓存的对象需要继承BaseHashObject /** * 这个类...
import java.util.HashMap; import java.util.Iterator; /** * 文件名:CacheManager.java 管理缓存 * 版本信息:V1.0 * 日期:2013-06-18 * Copyright BDVCD Corporation 2013 * 版权所有 ...
SimpleCacheA Cache framework ...用Java实现的轻量级缓存框架,你可以实现Cache和CacheFactoryStrategy接口来自定义你的缓存逻辑。使用HashMap进行存储,键为String,值可以为任意对象类型,如String,List,Map等。当
MapCache是纯JAVA写的,用的HashMap来缓存数据,用的RMI来同步数据。支持某台服务器关闭后启动着的服务器自动将切换成单机状态,支持关闭的服务器重启后马上能同步更新已存在的数据并将缓存切换成同步状态,支持为...
ava基础 基础知识 ...Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb
Java的LRU算法的基础是LinkedHashMap,LinkedHashMap继承了HashMap,并且在HashMap的基础上进行了一定的改动,以实现LRU算法。 1、HashMap 首先需要说明的是,HashMap将每一个节点信息存储在Entry<
Java的LRU算法的基础是LinkedHashMap,LinkedHashMap继承了HashMap,并且在HashMap的基础上进行了一定的改动,以实现LRU算法。 1、HashMap 首先需要说明的是,HashMap将每一个节点信息存储在Entry结构中。Entry
HashMap基于哈希表的 Map 接口的实现,本篇文章主要讲诉了java中HashMap,有兴趣的可以了解一下。
│ Java面试题11.HashMap和HashTable的区别.mp4 │ Java面试题12.实现一个拷贝文件的类使用字节流还是字符串.mp4 │ Java面试题13.线程的实现方式 怎么启动线程怎么区分线程.mp4 │ Java面试题14.线程并发库和线程池...
Redis-Java是一款由Java语言实现的高性能缓存中间件,基于TCP实现客户端与服务端双向通信。 基本功能 客户端、服务端收发字节流 服务端解析字节流,执行命令 五大数据类型的命令、通用命令支持 RDB、AOF持久化机制...
每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也是Java为什么能够跨平台的原因,当一个程序从开始运行,这是虚拟机就凯斯实例化了,多个程序启动就会存在多个虚拟机示例。程序退出或者关闭,则...
Java面试题11.HashMap和HashTable的区别 Java面试题12.实现一个拷贝文件的工具类要使用字节流还是字符串 Java面试题13.线程的的实现方式?怎么启动线程?怎么区分线程? Java面试题14.线程并发库和线程池的作用 Java...
JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之...
hashmap源码 java并发编程入门 基本概念 并发: 同时拥有俩个或者多个线程,如果线程在单核处理器上运行,多个线程将交替的换入或者换出内存,这些线程是同时 "存在" 的,每个线程都处于执行过程中的某个状态,如果...
j2cache 在系统中经常会用缓存以提供更好的性能,缓存主要的数据结构也只是K-V。对于一些早期产品使用haspmap作为缓存,随着发展需要分布式部署,那么就会...可以设置缓存有效期,解决hashmap之类无法通过有效期淘汰缓
以下是一些 Java 集合方面的面试题: Java 中集合框架的主要接口是什么?...如何使用 ConcurrentHashMap 类来实现高效的并发缓存? 如何使用 Spliterator 接口来实现自定义的集合遍历逻辑? 如何使用