springboot整合Guava Cache实现全局缓存

本文介绍了如何在不使用Redis的单体SpringBoot应用中集成GuavaCache,包括添加Maven依赖、创建Cache实例(服务类包装和SpringBean配置)、以及设置缓存过期时间和容量。
摘要由CSDN通过智能技术生成

最近碰到的问题需要使用全局缓存。项目中没有使用Redis,又是单体应用,又要实现缓存那种时效性(HashMap没有这种功能),后来找到了GuavaCache。Guava Cache是Google Guava库中的一个模块,提供了基于内存的本地缓存实现。以下是整合使用Guava Cache的具体步骤:

一、添加Maven依赖

<dependencies>  
    <!-- 其他依赖 -->  
    <dependency>  
        <groupId>com.google.guava</groupId>  
        <artifactId>guava</artifactId>  
        <version>21.0</version>  
    </dependency>  
</dependencies>

二、创建Cache实例

可以包装增强Cache实例再使用,或者直接创建一个全局的Cache实例使用。以下是对这两种情况的创建使用说明。

①在服务类中创建缓存实例,对缓存进行包装,再使用。

import com.google.common.cache.Cache;  
import com.google.common.cache.CacheBuilder;  
import java.util.concurrent.TimeUnit;  
  
@Service  
public class MyService {  
  
    private final Cache<String, Object> myCache;  
  
    public MyService() {  
        this.myCache = CacheBuilder.newBuilder()  
                .expireAfterWrite(10, TimeUnit.MINUTES) // 设置缓存过期时间  
                .maximumSize(100) // 设置缓存最大容量  
                .build();  
    }  
  
    public Object getFromCache(String key) {  
        return myCache.getIfPresent(key);  
    }  
  
    public void putIntoCache(String key, Object value) {  
        myCache.put(key, value);  
    }  
  
    // 其他业务逻辑...  
}

在上面的例子中,创建了一个Guava Cache实例,并设置了写入后10分钟过期和最大容量为100条记录的限制。

使用guava cache:

public TestService{
	@Autowired
	MyService myService;

    public Object getData(String key) {  
        Object cachedData = myService.getFromCache(key);  
		if (cachedData != null) {  
			return cachedData;  
		}  
      
		// 如果缓存中没有数据,则从数据源获取并放入缓存  
		Object newData = fetchDataFromDataSource(key);  
		myService.putIntoCache(key, newData);  
		return newData;  
	}  
  
	private Object fetchDataFromDataSource(String key) {  
		// 模拟从数据源获取数据的过程  
		// ...  
		return new Object();  
	}
}

② 配置为SpringBean

这个也是常用的方式。适用于不需要包装增强的情况。配置为Spring管理的Bean,可以在配置类中创建一个Bean。

import com.google.common.cache.Cache;  
import com.google.common.cache.CacheBuilder;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import java.util.concurrent.TimeUnit;  
  
@Configuration  
public class CacheConfig {  
  
    @Bean  
    public Cache<String, Object> myCache() {  
        return CacheBuilder.newBuilder()  
                .expireAfterWrite(10, TimeUnit.MINUTES)  
                .maximumSize(100)  
                .build();  
    }  
}

然后,在服务中,可以通过@Autowired注解来注入这个Bean:

import com.google.common.cache.Cache;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  
  
@Service  
public class MyTestService {  
  
    private final Cache<String, Object> myCache;  
  
    @Autowired  
    public MyTestService(Cache<String, Object> myCache) {  
        this.myCache = myCache;  
    }  
  
    // 使用myCache进行缓存操作...  
}

这样,就可以在Spring Boot应用中轻松地使用Guava Cache来缓存数据了。根据应用需求调整缓存的过期时间和容量大小。

至此整合完成。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的Spring Boot应用程序,使用Guava Cache实现本地缓存: 首先,需要在pom.xml文件中添加依赖: ``` <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0-jre</version> </dependency> ``` 然后,创建一个CacheManager bean来管理缓存: ``` @Configuration public class CacheConfig { @Bean public CacheManager cacheManager() { return new GuavaCacheManager("myCache"); } } ``` 在上面的代码中,我们使用GuavaCacheManager创建一个名为“myCache”的缓存管理器。 接下来,创建一个Service bean来使用缓存: ``` @Service public class MyService { @Autowired private CacheManager cacheManager; public String getData(String key) { Cache cache = cacheManager.getCache("myCache"); Cache.ValueWrapper valueWrapper = cache.get(key); if (valueWrapper != null) { return (String) valueWrapper.get(); } else { String data = getDataFromDatabase(key); cache.put(key, data); return data; } } private String getDataFromDatabase(String key) { // 从数据库获取数据 return "data for " + key; } } ``` 在上面的代码中,我们注入了CacheManager bean,并使用它来获取名为“myCache”的缓存。如果缓存中不存在所需的数据,我们从数据库中获取数据并将其放入缓存中。 现在,我们可以测试该应用程序是否正常工作: ``` @RestController public class MyController { @Autowired private MyService myService; @GetMapping("/data") public String getData(@RequestParam String key) { return myService.getData(key); } } ``` 在上面的代码中,我们注入了MyService bean,并在HTTP GET请求中使用它来获取数据。现在,我们可以使用curl或浏览器访问http://localhost:8080/data?key=test,应该会返回“data for test”。如果我们再次访问http://localhost:8080/data?key=test,应该会返回缓存中的数据,而不是从数据库中获取数据。 这就是使用Guava CacheSpring Boot应用程序中实现本地缓存的简单示例。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值