基于guava实现本地缓存
package com.daojia.service.djwechat.utils;import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;/*** @author : 董硕* @time: 2019-08-13 16:28* @desc: 利用guava实现的本地缓存工具类*/
public class LocalCacheUtil {/*** 缓存容器*/private static Map<String,Cache<String, Object>> cacheContainer = new ConcurrentHashMap<String,Cache<String, Object>>();/*** 获取默认的配置的localcache* @param cacheKey* @return*/public static Cache<String,Object> getLocalCache(String cacheKey) {Cache<String, Object> localCache = cacheContainer.get(cacheKey);if (null != localCache) {return localCache;}synchronized (LocalCacheUtil.cacheContainer) {if (null == localCache) {localCache = CacheBuilder.newBuilder().expireAfterWrite(1L, TimeUnit.HOURS).initialCapacity(2000).maximumSize(10000).concurrencyLevel(Runtime.getRuntime().availableProcessors()).recordStats().build();cacheContainer.put(cacheKey,localCache);}return localCache;}}/*** 自定义配置* @param cacheKey* @param duration 时间系数* @param unit 时间单位* @param initialCapacity 初始化容量* @param maximumSize 最大容量* @param concurrencyLevel 并发级别* @return*/public static Cache<String,Object> getLocalCache(String cacheKey,long duration,TimeUnit unit,int initialCapacity,int maximumSize,int concurrencyLevel) {Cache<String, Object> localCache = cacheContainer.get(cacheKey);if (null != localCache) {return localCache;}synchronized (LocalCacheUtil.cacheContainer) {if (null == localCache) {//recordStats开启缓存状况统计,expireAfterAccess过期时间,initialCapacity初始化大小,maximumSize最大值localCache = CacheBuilder.newBuilder().expireAfterWrite(duration, unit).initialCapacity(initialCapacity).maximumSize(maximumSize).concurrencyLevel(concurrencyLevel).recordStats().build();cacheContainer.put(cacheKey,localCache);}return localCache;}}
}
基于guava实现本地缓存相关推荐
- Guava CacheBuilder 本地缓存的使用
目录 前言 CacheBuilder代码截图 使用示例代码举例 CacheLoader加载 缓存回收 基于容量的回收(size-based eviction) 定时回收(Timed Eviction) ...
- Google Guava Cache--localcache本地缓存实例
何为缓存?本地缓存类似于map,当给定一个key,首先查找缓存中是否已经有值了,如果有则直接返回数据:相反如果不存在这样的key,则将新的内容value值缓存起来,以便下一次来查询,可以快速返回. 当 ...
- 基于Java实现本地缓存,缓存过期删除和LRU缓存淘汰
我们结合平常使用的Redis来想下,自己实现本地缓存需要考虑哪些因素呢,我这里总结了三点: 数据存储,基于Java实现的话我首先想到的是key-value结构的集合,如HashMap,并发环境下的话使 ...
- Redis与本地缓存组合食用,味道更佳!
点击下方"IT牧场",选择"设为星标" 来源:juejin.cn/post/7000263632151904293 前言 设计示例 Redis结合本地缓存 后记 ...
- guava_使用Google Guava Cache进行本地缓存
guava 很多时候,我们将不得不从数据库或另一个Web服务获取数据或从文件系统加载数据. 在涉及网络呼叫的情况下,将存在固有的网络延迟,网络带宽限制. 解决此问题的方法之一是在应用程序本地拥有一个缓 ...
- 使用Google Guava Cache进行本地缓存
很多时候,我们将不得不从数据库或另一个Web服务获取数据或从文件系统加载数据. 在涉及网络呼叫的情况下,将存在固有的网络等待时间,网络带宽限制. 解决此问题的方法之一是在应用程序本地拥有一个缓存. 如 ...
- java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...
一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...
- 本地缓存之Guava简单使用
文章目录 使用场景 Guava Cache 的优势 Guava Cache使用 CacheLoader Callable 删除 主动删除 过期删除 基于容量删除 引用删除 高级用法 并发设置 更新锁定 ...
- 本地缓存到分布式缓存( Guava, Caffeine, Memcached, Redis)
本地缓存:指的是在应用中的缓存组件,是应用和cache是在同一个进程内部,单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适: 分布式缓存:应用分离的缓存组件或服务,是自身 ...
最新文章
- Python为何能成为数据分析的主流工具?
- mysql知识测试_MySQL基础知识测试
- 企业建设呼叫中心需要考虑哪些因素
- MySQL left()函数
- 05-传统开发模式DAO
- [转]《精通Javascript》笔记:第六章(事件)
- element元素 取属性_JS-DOM Element方法和属性
- readelf 和 objdump 例子详解及区别 (ELF文件说明)
- steam游戏直连工具
- python利用pandas实现excel数据分组汇总
- 字母重排(算法竞赛入门经典)
- 2023年全国最新交安安全员精选真题及答案3
- 苹果系统 macOS Mojave 10.14.4上安装 Ubuntu 18.04 双系统
- cocos-Lua FairyGUI 之 列表(九)
- python signal模块_Python signal 信号模块和进程
- 最近成了三等奖专业户
- python市场_大交易数据的python市场篮子分析
- Chia官方:有关Chia官方矿池的重要解读,费率更加透明,爆块更稳定
- c语言程序 存款利息的计算,【c语言】存款利息的计算
- Qt断开信号与槽的方法,Qt信号的处理 (connect和disconnect和blockSignals的使用方法)
热门文章
- 数字相控阵Matlab仿真
- Couldn‘t find Lora with name guofeng3_v32Light 0% 0/20 [00:00<?, ?it/s] Error completing request A
- 给中国学生的第二封信
- JSP+Servlet+Javabean自助餐厅饭店收银管理系统带推荐
- mindmanager xmind freemind
- 计算机图形学【GAMES-101】9、蒙特卡洛路径追踪(Path Tracing)(光源采样)
- 一、Glade-3安装配置
- 王爽汇编语言实验8:分析一个奇怪的程序
- Unity使用暴风魔镜VR游戏开发
- 基于工业物联网的草场环境监测信息管理系统