网站首页 > java教程 正文
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库。提供Cache本地缓存工具在高并发和日常使用中也有不错的效果。
提供 的缓存与JAVA本身ConcurrentMap非常相似,使用起来也非常顺手。增加的定时回收机制在很多场景下解决了很多麻烦,同时Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效。使用的时候可以根据业务的需要适当选择。
maven引用:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0-rc1</version>
</dependency>
引入gradle依赖:
compile 'com.google.guava:guava:26.0-jre'
常用的方法如下:
public static Cache<String,Integer> googleCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).maximumSize(20000).build();
public static void putCache(String key,Integer value){
googleCache.put(key, value);
}
public static boolean isInvalid(String key) throws ExecutionException{
boolean result = false;
Integer resultInt = googleCache.get(key,new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return -1;
}
});
if(resultInt>0){
result = true;
}
return result;
}
public static Integer get(String key){
Integer resultInt=-1;
try {
resultInt = googleCache.get(key,new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return -1;
}
});
} catch (ExecutionException e) {
e.printStackTrace();
}
return resultInt;
}
方法说明:
concurrencyLevel(int concurrencyLevel)-允许同时并发更新操作数
maximumSize(long size)-允许最大的缓存条目数
maximumWeight(long weight)-数据清除权重
weakKeys()-将缓存中的key设置成weakKey模式
initialCapacity(int initialCapacity)-指定用于缓存的hash table最低总规模
个别清除:Cache.invalidate(key)
批量清除:Cache.invalidateAll(keys)
清除所有缓存项:Cache.invalidateAll()
总结:
1:由于是在内存中操作,故不能持久化,使用时还要顾忌到这一点。
2:由于是使用系统内存,因此也意味着消耗系统的内存来换取读取性能的提升。
3:由于是单机访问数据,个别高并发下需要考虑集群处理。
猜你喜欢
- 2024-10-25 Caffeine高性能本地缓存框架初探(caffeine缓存原理)
- 2024-10-25 Redis学习3——Redis应用之缓存(redis的缓存的使用方式)
- 2024-10-25 Java高级——缓存的使用场景(java缓存机制)
- 2024-10-25 java中常用的几种缓存类型介绍(java常用缓存技术)
- 2024-10-25 本地缓存之王caffeine#代码(本地缓存 js)
- 2024-10-25 skywalking agent 本地缓存队列参数设置
- 2024-10-25 史上最实用的:分布式缓存方案(分布式缓存设计方案)
- 2024-10-25 使用Guava作为本地缓存让系统飞起来
- 2024-10-25 深究分布式缓存的九个点(分布式缓存技术有哪些)
- 2024-10-25 面试题之java缓存总结,从单机缓存到分布式缓存架构
你 发表评论:
欢迎- 最近发表
-
- Java对象栈上分配(java对象分配在栈上)
- Java中类和对象到底是什么?一场技术、哲学与设计的深度探索
- VSCode手动创建SpringBoot项目的方法,及详细步骤
- Redis全栈应用实战:从缓存到分布式系统全场景解析
- 用Ansible从零开始部署Spring Boot Web应用:全栈自动化部署指南
- Docker + Kubernetes部署Java应用:从容器化到集群管理的全栈体验
- 如何成为python全栈工程师(python全栈要学多久)
- 俄罗斯程序员创建了外国Java集成开发环境的国产替代品
- Java开发环境最丝滑的打开方式(java项目开发环境)
- idea最新激活jetbrains-agent.jar包,亲测有效
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)