guava是谷歌几个java核心类库的集合,包括集合、缓存、原生类型、并发、常用注解、基本字符串操作和I/O等等。
这篇文章主要说明下其中缓存部分的用法。这文章主要是我结合wiki中内容学习的一个小结:
wiki的地址如下,但是需要fan qiang访问: https://code.google.com/p/guava-libraries/wiki/CachesExplained
基本上可以通过两种方式来创建cache:
cacheLoader
callable callback
通过这两种方法创建的cache,和通常用map来缓存的做法比,不同在于,这两种方法都实现了一种逻辑——从缓存中取key X的值,如果该值已经缓存过了,则返回缓存中的值,如果没有缓存过,可以通过某个方法来获取这个值。
但不同的在于cacheloader的定义比较宽泛,是针对整个cache定义的,可以认为是统一的根据key值load value的方法。
而callable的方式较为灵活,允许你在get的时候指定。
下面是两种方法的例子:
首先是基于cacheloader的方法
@Test
public void testCacheBuilder() throws ExecutionException {
LoadingCache<String, String> graphs = CacheBuilder.newBuilder().maximumSize(1000)
.build(new CacheLoader<String, String>() {
public String load(String key) {
// 这里是key根据实际去取值的方法,例如根据这个key去数据库或者properties文件中取值
ApplicationContext context = new FileSystemXmlApplicationContext("E:/WorkDir/struts2practice/GuavaTest/WebRoot/WEB-INF/xml/springConfig.xml");
JdbcCustomerDAO aJdbcCustomerDAO = context.getBean(JdbcCustomerDAO.class);
System.out.println("load method has been invoked");
return aJdbcCustomerDAO.findValue(key);
}
});
String resultVal = graphs.get("testKey");
System.out.println("first time value is: " + resultVal);
String resultVal1 = graphs.get("testKey");
System.out.println("second time values is: " + resultVal1);
}
其次是基于实现callable的方法:
@Test
public void testCallable() throws ExecutionException {
// 没有使用CacheLoader
Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(1000).build();
String resultVal = cache.get("testKey", new Callable<String>() {
public String call() {
// 这里先根据key实际去取值的方法,例如根据这个key去数据库或者properties文件中取值
ApplicationContext context = new FileSystemXmlApplicationContext("E:/WorkDir/struts2practice/GuavaTest/WebRoot/WEB-INF/xml/springConfig.xml");
JdbcCustomerDAO aJdbcCustomerDAO = context.getBean(JdbcCustomerDAO.class);
System.out.println("resultVal call method is invoked");
return aJdbcCustomerDAO.findValue("testKey");
}
});
System.out.println("first time value is: " + resultVal);
String resultVal1 = cache.get("testKey", new Callable<String>() {
public String call() {
// 这里先根据key实际去取值的方法,例如根据这个key去数据库或者properties文件中取值
ApplicationContext context = new FileSystemXmlApplicationContext("E:/WorkDir/struts2practice/GuavaTest/WebRoot/WEB-INF/xml/springConfig.xml");
JdbcCustomerDAO aJdbcCustomerDAO = context.getBean(JdbcCustomerDAO.class);
System.out.println("resultVal1 call method is invoked");
return aJdbcCustomerDAO.findValue("testKey");
}
});
System.out.println("second time values is: " + resultVal1);
}
分享到:
相关推荐
本案例代码将详细介绍Guava Cache的使用,包括缓存的创建、删除、获取、失效监听、加载以及淘汰策略。 1. **缓存创建**: Guava Cache可以通过CacheBuilder类创建。CacheBuilder提供了丰富的配置选项,如最大容量...
初始化Guava Cache时,可以通过`LoadingCache`接口创建一个自定义配置的缓存实例。例如,我们可以设置最大容量、过期时间等参数: ```java LoadingCache, Graph> graphs = CacheBuilder.newBuilder() .maximum...
`goburrow-cache`可能实现了这样的机制,为每个缓存项添加一个创建时间戳,并定期进行清理。 2. **大小限制**:Guava Cache允许设定缓存的最大容量,当达到上限时,会根据一定的策略(如LRU、LFU)淘汰旧的条目。在...
然后,我们创建一个 CacheServiceImpl 类,实现 CacheService 接口,并使用 Guava Cache 进行缓存: ```java @Service public class CacheServiceImpl implements CacheService { private Cache, Object> common...
在配置Guava Cache时,需要创建一个GuavaCacheConfig配置类,并在其中设置CacheManager。 CacheManager是Guava Cache的核心组件,负责管理缓存的生命周期。在GuavaCacheConfig配置类中,需要使用@Bean注解来创建...
创建Guava Cache实例,可以通过CacheBuilder构建器来定制缓存的配置,例如设置最大容量、过期时间等。 ```java LoadingCache, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite...
Guava Cache是Google Guava库中的一个功能强大的本地缓存实现,它为Java开发者提供了高效、易用的缓存解决方案。Guava Cache的设计目标是为了帮助应用程序在内存中存储经常访问的数据,以减少对远程服务或者数据库的...
《Spring Boot结合Guava Cache实现高效缓存管理》 在现代Web应用开发中,缓存技术扮演着至关重要的角色,能够显著提升系统性能,减少数据库压力。Spring Boot框架结合Google的Guava库提供了便捷的缓存管理功能。...
创建一个Guava Cache对象,你可以通过`LoadingCache`接口,它在缓存项缺失时会自动加载。例如: ```java LoadingCache, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(1000) // 设置最大缓存容量 ....
在这个名为 "Guava-Cache-Demo" 的项目中,我们将深入探讨如何利用 Guava Cache 来实现缓存机制,并通过一个实际示例——使用 Google Books API 获取 ISBN 对应图书详情——来展示其用法。 首先,我们需要理解 ...
Java内存缓存工具Guava LoadingCache使用...在上面的示例中,我们创建了一个Guava Cache管理器,指定了缓存池的最大大小、缓存时间和缓存类型。然后,我们使用CacheLoader来加载缓存数据,并指定了缓存项的处理逻辑。
LoadingCache 是 Guava 库提供的一种缓存实现方式,本文将详细介绍如何基于 LoadingCache 实现 Java 本地缓存。 一、Guava 介绍 Guava 是 Google 开源的一套工具库,其中提供的 cache 模块非常方便,是一种与 ...
此外,Guava的Cache模块则提供了一种内存缓存机制,可以根据预设策略自动清除过期的数据,有效提升了应用性能。 Guava对原生类型(如int、char等)提供了泛型支持,避免了装箱拆箱带来的额外开销。例如,Ints、...
2. **缓存机制**:Guava的Cache模块允许开发者创建本地缓存,可以自动管理内存并支持基于时间和引用的过期策略,有效提高了应用程序的性能。 3. **并发编程支持**:Guava提供了实用的并发工具类,如...
本示例主要涉及了三种常用的缓存管理工具:Redis、Guava Cache和Caffeine。让我们深入探讨这些技术及其在Spring Boot中的实现。 首先,Redis是一个开源的、基于网络的、支持多种数据结构(如字符串、哈希、列表、...
Guava 支持函数式编程风格,包括 Function 接口,可以将一个对象转换为另一个对象,以及 Predicates,用于创建可重用的条件检查。 5. **字符串处理** Guava 提供了有用的字符串工具,如 Joiner 和 Splitter,用于...
Guava的Cache模块提供了一种高效的缓存解决方案,它支持自动加载、过期策略、大小限制等功能。开发者可以通过简单API实现数据的缓存,提高系统的响应速度,同时减少不必要的计算或数据库查询。 三、并发工具 Guava...
本项目"spring-boot-redis-guava-caffeine-cache"主要探讨了如何在Spring Boot应用中集成Redis、Guava和Caffeine三种不同的缓存策略。 首先,Redis是一款开源的内存数据结构存储系统,常被用作数据库、缓存和消息...
9. **缓存加载器**:Guava的LoadingCache接口允许开发者定义一个加载函数,当缓存中没有所需项时,自动从其他来源加载。 10. **事件监听**:Guava的 EventBus 让组件间通过发布和订阅事件进行通信,实现松耦合。 ...
2. **缓存机制**:Guava的Cache模块允许开发者创建本地缓存,它可以自动管理资源,如基于引用的过期策略和大小限制。这有助于提高应用程序的性能,减少对远程服务的调用。 3. **并发工具**:Guava提供了强大的并发...