基于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是在同一个进程内部,单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适: 分布式缓存:应用分离的缓存组件或服务,是自身 ...
最新文章
- SAP PM 后台配置TCODE
- 如何打造一个搞垮团队的绩效考核?
- 【深度学习入门到精通系列】Gamma变换(校正)
- 详细回复某个CSDN网友,对我的文章和技术实力以及CSDN的吐槽
- 前端学习(1750):前端调试值之call stack
- linux云服务器状态上报解决方案:外发个人邮箱
- python怎么学习一门语言_如何学习Python这一门语言
- 2999元起!Redmi K40系列不止骁龙888:还将标配双扬声器
- OneAPM Cloud Test——系统性能监控神器 1
- 让一个元素水平垂直居中的方法
- 同态滤波 matlab代码,同态滤波处理光照不均匀图像Matlab代码
- java 对象判断null_Java判断对象是否为null的方法
- 大聪明教你学Java | 没有绝对安全的系统
- 使用keep-live组件无法销毁cesium的view
- 高分一号数据处理(一):数据下载
- 深入 Go 中各个高性能 JSON 解析库
- xxx学校/学院/大学信息管理系统
- 计算机网络安全专家高薪,纽约理工大学温哥华校区NYIT计算机网硕士
- Windows API 之 DialogBoxParamA
- 去培训基础报班学UI设计靠谱吗?
热门文章
- cascades文档翻译——HomeScreen
- js向html中指定位置追加文本,JavaScript中如何添加文本节点?
- 企业信息化管理:SaaS软件or传统软件如何选择?
- 新游戏发布《三国记黄巾之乱》—新引擎预热
- CompleteFuture的介绍和使用
- Spring Boot 学习第一步(搭建初步环境)
- Unable to verify your captcha response.注册GitHub第一步问题解决;2018.11.17
- java+selenium的入门 案例 selenium包 谷歌驱动包 火狐驱动包 IE驱动包 (一)
- bartender4没有权限打开怎么办?解决bartender给不了权限问题
- 南昌课程大纲_cnn