import java.util.Random; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; /** * 本地缓存帮助类 * * @author ThinkPad * */ public class LocalCache<K, V> { public Cache<K, V> cache = callableCached(); /** * 定时任务map */ private ConcurrentHashMap<Object, Timer> timerMap = new ConcurrentHashMap<Object, Timer>(); public Cache<K, V> callableCached() { Cache<K, V> cache = CacheBuilder.newBuilder().build(); return cache; } public LocalCache() { } public LocalCache(Cache<K, V> cache) { this.cache = cache; } /** * 加入定時任務,定时任务只会初始化一次 * * @param ObjectKey * @param timerTask * @param delay * @param period * @return */ public void addTimerTask(String ObjectKey, TimerTask timerTask, long delay, long period) { if (ObjectKey == null || timerTask == null) { return; } if (!timerMap.containsKey(ObjectKey)) { Timer timer = new Timer(); Timer timerOld = timerMap.putIfAbsent(ObjectKey, timer); if (timerOld == null) { timer.schedule(timerTask, delay, period); } } return; } /** * 关闭定时任务 * * @param ObjectKey */ public void cancelTimerTask(String ObjectKey) { if (ObjectKey == null) { return; } Timer timer = timerMap.get(ObjectKey); if (timer != null) { timerMap.remove(ObjectKey); timer.cancel(); } } public static void main(String[] args) throws Exception { final LocalCache<String, String> cache = new LocalCache<String, String>(); System.out.println(cache.cache.get("1", new Callable<String>() { public String call() throws Exception { Thread.sleep(1000); return "3"; } })); for( int i=0;i<10;i++){ final int j = i; new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { cache.addTimerTask("1", new TimerTask() { @Override public void run() { cache.cache.put("1", j+""+new Random().nextInt(40)); } }, 1, 1000); } catch (Exception e) { e.printStackTrace(); } } }).start();; } //cache.cache.put("1", "2"); while(true){ System.out.println(cache.cache.get("1", new Callable<String>() { @Override public String call() throws Exception { // TODO Auto-generated method stub Thread.sleep(1000); return "3"; } })); Thread.sleep(1000); } } }
相关推荐
Java LocalCache 本地缓存的实现实例 Java LocalCache 本地缓存的实现实例主要介绍了两种LocalCache的实现方法,一种是基于ConcurrentHashMap实现基本本地缓存,另外一种是基于LinkedHashMap实现LRU策略的本地缓存...
LocalCache 是一种本地高速缓存机制,它主要用于提升数据获取速度,尤其是在处理大量数据时,可以有效避免频繁访问远程数据库或分布式缓存,如 Redis 中的热键问题。LocalCache 不是分布式的,所以它更适合用于单机...
仿redis缓存Java版轻量级缓存组件LocalCache,基于JVM内存实现数据缓存及过期机制
标题中的“Web应用开启了Local cache后,发现应用日志不再更新1”指出的问题是,在启用Web应用程序的本地缓存功能后,应用程序的日志记录出现了异常,不再持续更新。描述中提到,日志在大约2分钟后中断,这与Local ...
JetCache是一个基于java的缓存系统封装,提供统一的API和注解简化缓存的使用。JetCache提供了比SpringCache更强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,提供了Cache接口用于手工缓存操作。当前有四...
在query方法中,可以看到Mybatis会检查当前查询栈(queryStack)的深度,当查询栈为0且MappedStatement对象的flushCache属性设置为true时,会清理本地缓存(localCache)。这通常发生在每次新的SQL语句执行之前,确保...
本文将围绕“电脑知识:让系统快步如飞——正确设置Windows缓存”这一主题进行深入探讨,旨在帮助用户理解如何优化Windows系统的缓存设置,从而提高计算机的整体运行效率。 #### 一、理解缓存(Cache)的作用 缓存...
2. **搜索缓存设置项**:在配置页面中搜索`cache4`或`CacheDirectory4`,这两个选项分别对应HTTP缓存和SSL缓存的存储位置。 3. **修改缓存路径**:选中对应的设置项后,可以在其右侧看到当前的缓存目录路径,点击...
此可执行文件通过读取`appsettings.json`配置文件来获取清理规则和设置,如默认的缓存路径、清理策略等。`appsettings.json`文件通常用于存储应用程序的配置信息,对于这款清理工具来说,它可能包含了哪些文件或...
### CPU二级缓存设置详解 #### 一、CPU缓存基础知识 在深入了解如何开启或配置CPU的二级缓存之前,我们需要先对CPU缓存的基本概念有所了解。 **1.1 一级缓存(L1 Cache)** 一级缓存是位于CPU内部的高速缓存,...
其中,`d:\cache`表示你想要放置缓存的路径,而`104857600`代表缓存的最大大小(单位为字节,此处设置为100MB)。 2. **修改注册表** - 打开注册表编辑器(可通过快捷键`Win+R`,然后输入`regedit`运行)。 - ...
本地缓存 本地缓存 从 Google Code 项目导入 我不是作者,只是想在 Google Code 关闭时保存脚本 #原始自述文件 在 HTML 5 中,我们得到了 localStorage,这是一种在本地存储名称/值对的快速简便的方法。 但是,与 ...
sudo cp hcache /usr/local/bin/ # 一、查看前10个大文件缓存 hcache -top 10 # 查看指定pid进程号的进程缓存 hcache -pid #可以将结果写入txt然后使用shell统计进程总缓存大小 #取大小 hcache -pid 117466 | ...
一级缓存是 Session 级别的缓存,也称为本地缓存(Local Cache)。每当我们在一个 SqlSession 中执行了 CRUD 操作,查询的结果会被存储在当前 SqlSession 的一级缓存中。如果下次再请求同样的 SQL,MyBatis 会首先在...
buffer=======Introduction(介绍)采用C写的扩展完全不担心性能问题采用HashMap数据结构和LRU算法支持此扩展采用进程级共享本地缓存(local cache),能友好的预备热冷数据提供类似于php static静态池,伸缩方便参考...
但是Guava Cache是一个全内存的本地缓存实现,而且提供了线程安全机制,所以特别适合于代码中已经预料到某些值会被多次调用的场景下。 Guava Cache可以作为Spring Boot应用中的本地缓存,以提高程序的性能。在使用...
在Web应用中,Cache缓存被用于存储经常访问但变化不大的数据,以减少对数据库的直接访问,从而提升整体性能。计算机系统本身就采用了多级缓存结构,例如CPU中的L1、L2和L3缓存,它们分别位于不同层次,为处理器提供...
在源码层面,一级缓存主要由DefaultSqlSession类中的LocalCache对象实现。当执行SQL时,Executor会检查LocalCache,如果查找到数据,则直接返回;否则,Executor通过Executor接口的query方法执行SQL,然后将结果放入...
LocalStash 是一种快速、简约的内存键/值缓存,支持过期。 本质上,它与 memcached 等其他键/值存储非常相似,不同之处在于 LocalStash 仅将内容保存在当前进程的内存中,而不保存在某些外部服务中。 LocalStash ...