SpringBoot整合Guava Cache实现全局缓存的示例代码

 更新时间:2024年03月19日 09:41:15   作者:brightcon  
这篇文章主要介绍了SpringBoot整合Guava Cache实现全局缓存,Guava Cache是Google Guava库中的一个模块,提供了基于内存的本地缓存实现,文中介绍了SpringBoot整合使用Guava Cache的具体步骤,需要的朋友可以参考下

最近碰到的问题需要使用全局缓存。项目中没有使用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来缓存数据了。根据应用需求调整缓存的过期时间和容量大小。

至此整合完成。

以上就是SpringBoot整合Guava Cache实现全局缓存的示例代码的详细内容,更多关于SpringBoot Guava Cache全局缓存的资料请关注脚本之家其它相关文章!

相关文章

  • java ReentrantLock详解

    java ReentrantLock详解

    这篇文章主要介绍了java ReentrantLock,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java Collection 移除元素方法及注意事项

    Java Collection 移除元素方法及注意事项

    这篇文章主要介绍了Java Collection 移除元素方法及注意事项,通过一个简单实例给大家讲解,需要的朋友可以参考下
    2020-01-01
  • Springboot入门案例及部署项目的详细过程

    Springboot入门案例及部署项目的详细过程

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,本文给大家分享一个入门案例使用Springboot1.5.9搭建,具体配置部署过程跟随小编一起看看吧
    2021-07-07
  • 如何使用Spring+redis实现对session的分布式管理

    如何使用Spring+redis实现对session的分布式管理

    本篇文章主要介绍了如何使用Spring+redis实现对session的分布式管理,本文主要是在Spring中实现分布式session,采用redis对session进行持久化管理,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • mybatis源码解读-Java中executor包的语句处理功能

    mybatis源码解读-Java中executor包的语句处理功能

    这篇文章主要介绍了Java中executor包的语句处理功能,在mybatis映射文件中传参数,主要用到#{}或者${},下文围绕相关资料展开详细内容,需要的小伙伴可以参考一下
    2022-02-02
  • SpringCloud使用Zookeeper作为配置中心的示例

    SpringCloud使用Zookeeper作为配置中心的示例

    这篇文章主要介绍了SpringCloud使用Zookeeper作为配置中心的示例,帮助大家更好的理解和学习使用SpringCloud,感兴趣的朋友可以了解下
    2021-04-04
  • ChatGpt都使用的Java BPE分词算法不要了解一下

    ChatGpt都使用的Java BPE分词算法不要了解一下

    Byte Pair Encoding(BPE)是一种文本压缩算法,它通常用于自然语言处理领域中的分词、词汇表构建等任务,本文将对 BPE 算法进行全面、详细的讲解,并提供 Java 相关的代码示例,希望对大家有所帮助
    2023-06-06
  • SpringBoot CountDownLatch多任务并行处理的实现方法

    SpringBoot CountDownLatch多任务并行处理的实现方法

    本篇文章主要介绍了SpringBoot CountDownLatch多任务并行处理的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 详解spring cloud整合Swagger2构建RESTful服务的APIs

    详解spring cloud整合Swagger2构建RESTful服务的APIs

    这篇文章主要介绍了详解spring cloud整合Swagger2构建RESTful服务的APIs,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 详解Java 加密解密和数字签名问题

    详解Java 加密解密和数字签名问题

    在做项目中,只要涉及敏感信息,或者对安全有一定要求的场景,都需要对数据进行加密。接下来通过本文给大家分享Java 加密解密和数字签名问题,感兴趣的朋友跟随小编一起看看吧
    2021-12-12

最新评论