JAVA日常优化---Guava缓存玩耍异步刷新
/*** v2支撑* @author chenzhen* Created by chenzhen on 2018/11/20.*/
public class TypeNumberCache {private static Logger logger = LoggerFactory.getLogger(TypeNumberCache.class);private static EntityInfoDaoImpl entityInfoDao = new EntityInfoDaoImpl();/*** LRU算法*/private static LoadingCache<String, Integer> localCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(2000).refreshAfterWrite(2, TimeUnit.MINUTES).build(new CacheLoader<String, Integer>() {//默认的数据加载实现,当调用get取值的时候,如果key没有对应的值,就调用这个方法进行加载.@Overridepublic Integer load(String s) throws Exception {Integer value = entityInfoDao.listEntityBy("_type",s).size();TypeNumberCache.setKey(s,value);return value;}@Overridepublic ListenableFuture<Integer> reload(String key, Integer oldValue) throws Exception {//asynchronous,异步刷新ListenableFutureTask<Integer> task = ListenableFutureTask.create(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {return entityInfoDao.listEntityBy("_type",key).size();}});ExecutorService executorService = CacheExecutorServiceUtil.newExecutorService();executorService.execute(task);executorService.shutdown();return task;}});public static void setKey(String key, Integer value) {localCache.put(key, value);}public static Integer getKey(String key) {Integer value;try {value = localCache.get(key);if (value==null) {return -1;}return value;} catch (Exception e) {logger.error("TypeNumberCache get error", e);}return -1;}public static void cleanUp() {localCache.cleanUp();}
}
自定义线程池
/*** Guava缓存自定义线程池* @author chenzhen* Created by chenzhen on 2018/11/27.*/
public class CacheExecutorServiceUtil {private static final int CORE_POOL_SIZE = 10;private static final int MAXIMUM_POOL_SIZE = 30;private static final long KEEP_ALIVE_TIME = 10L;private static final TimeUnit TIME_UNIT = TimeUnit.SECONDS;private static final ThreadFactory THREAD_FACTORY = new ThreadFactory() {private final ThreadFactory defaultFactory = Executors.defaultThreadFactory();private final AtomicInteger threadNumber = new AtomicInteger(1);@Overridepublic Thread newThread(Runnable r) {Thread thread = this.defaultFactory.newThread(r);if(!thread.isDaemon()) {thread.setDaemon(true);}thread.setName("Guava-Cache" + this.threadNumber.getAndIncrement());return thread;}};public static ExecutorService newExecutorService() {return new ThreadPoolExecutor(CORE_POOL_SIZE,MAXIMUM_POOL_SIZE, KEEP_ALIVE_TIME, TIME_UNIT, new ArrayBlockingQueue<>(200), THREAD_FACTORY);}}
JAVA日常优化---Guava缓存玩耍异步刷新相关推荐
- memcached java 客户端优化,分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用...
Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...
- 缓存系统MemCached的Java客户端优化历程
來源:http://www.infoq.com/cn/articles/memcached-java 作者 岑文初 发布于 2008年9月27日 上午12时38分 社区 Java 主题 集群与缓存 M ...
- java获取本机ipv4,并使用Google Guava 缓存
java写个util,获取本机ip,并使用Google Guava 缓存起来 四个方法: 获取本机ipv4 ip转16进制 16进制转ip 校验ip 首先,Google Guava使用的maven配置 ...
- 拉勾教育 | Java 性能优化实战 21 讲
开篇词 开篇词 | Java 性能优化,是进阶高级架构师的炼金石 你好,我是李国.作为<Java 性能优化与面试 21 讲>这个课程的作者,我先来简单介绍下自己. 我曾任京东金融.陌陌科技 ...
- Google的Java常用类库 Guava
Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库.这个库是为了方便编码,并减少编码错误.这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验 ...
- Google guava第一讲:guava缓存实战/使用场景/缓存清理/最佳实践/caffeine实战
Guava缓存实战及使用场景 摘要:本文是Google guava 第一件,本文先介绍了为什么使用Guava Cache缓存,然后讲解了使用方法及底层数据结构,结合实际业务,讲解使用guava过程中踩 ...
- Java类库Google Guava学习
参考 官网 https://github.com/google/guava Google Guava官方教程(中文版) | 并发编程网 – ifeve.com 一篇让你熟练掌握Google Guava ...
- Java面试题:缓存三大问题及解决方案!
Java面试少不了一些技术类型的笔试题,面试过程中很多小伙伴可能表达很好,结果Java基础不是很牢固,所以今天针对Java笔试题,小编汇总来一下Java的面试题缓存三大问题及解决方案. 1. Java ...
- 赠书:《Java性能优化实践》,众多业内大佬推荐阅读
没有捷径可走的 Java 性能优化 多年来,用 Google 搜索 Java performance tuning,出现的三篇最热门文章之一是于 1997 年到 1998 年左右发表的文章,这篇文章在 ...
- java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...
最新文章
- 语义网所谓的“本体”的具体例子是什么?人工智能
- vue中阻止冒泡事件
- 【C 语言】字符串模型 ( 键值对模型 )
- 「Sqlserver」数据分析师有理由爱Sqlserver之三-最值得使有低投入高产出的Sqlserver功能...
- windows下python SSH-Client模块paramiko的安装与修改
- Linq的Distinct太不给力了
- “华硕zx50j,键盘背光灯无法显示,fn组合键不可用”解决办法
- 服务器显示A40故障码,求助大神,车子出现故障码,5053无法消除
- 使用smartdns加速DNS域名解析
- You may need an appropriate loader to handle this file type, currently no loaders are configured to
- 关于标志信息ZF、OF、SF、CF的理解
- 斐讯K2刷固件(支持v22.4.2.15以上)
- 微信公众号(服务号)申请时候需要补充的资料
- 数据校验validation
- 契约锁电子签章在食品行业全产业链的应用场景
- 【题解】2020年蓝桥杯C/C++程序设计B组·试题 D: REPEAT 程序
- 第12章 项目沟通管理和干系人管理
- PWN入门(3)覆盖堆栈上的变量
- 百度商家口碑将停止运营并下线
- 字节跳动测试岗面试挂在二面,我复盘总结了失败原因,决定再战一次
热门文章
- 《Android UI基础教程》——1.4节工具
- react-native 解决“Could not get BatchedBridge...” 的问题
- AFNetwork 作用和使用方法具体解释
- CCIE学习笔记 2---BGP选路(属性值)
- gcms基峰有什么用_金鉴实验室 | 气相质谱(GCMS)
- linux中文件大小的分配,Linux创造固定的文件大小-预分配磁盘空间
- oracle 表列统计信息,Oracle中收集表与列统计信息
- python载入图片序列_python – 使用matplotlib显示图像序列
- word中填充效果锁定纵横比_操作基础知识Word文字编辑
- html合并单元格_HTML基础2