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全局缓存的资料请关注脚本之家其它相关文章!

相关文章

  • springBoot基于webSocket实现扫码登录

    springBoot基于webSocket实现扫码登录

    最近做了个新项目,涉及到扫码登录。之前项目使用的是 ajax轮询的方式。感觉太low了。所以这次用webSocket的方式进行实现,感兴趣的可以了解一下
    2021-06-06
  • Java中List集合数据修改方式

    Java中List集合数据修改方式

    这篇文章主要介绍了Java中List集合数据修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java 实战项目锤炼之医院门诊收费管理系统的实现流程

    Java 实战项目锤炼之医院门诊收费管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+html+jdbc+mysql实现一个医院门诊收费管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Java定时器@Scheduled注解的使用方法

    Java定时器@Scheduled注解的使用方法

    这篇文章主要给大家介绍了关于Java定时器@Scheduled注解的使用方法,在Java中使用@Scheduled注解可以方便地实现定时任务的功能,文中介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • springboot3.0整合mybatis-flex实现逆向工程的示例代码

    springboot3.0整合mybatis-flex实现逆向工程的示例代码

    逆向工程先创建数据库表,由框架负责根据数据库表,自动生成mybatis所要执行的代码,本文就来介绍一下springboot mybatis-flex逆向工程,感兴趣的可以了解一下
    2024-06-06
  • Java动态脚本Groovy获取Bean技巧

    Java动态脚本Groovy获取Bean技巧

    这篇文章主要给大家分享的是Java动态脚本Groovy获取Bean技巧,在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象。下面我们一起进入文章学习个表格多 详细内容吧

    2021-12-12
  • 基于CopyOnWriteArrayList并发容器(实例讲解)

    基于CopyOnWriteArrayList并发容器(实例讲解)

    下面小编就为大家带来一篇基于CopyOnWriteArrayList并发容器(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Netty分布式ByteBuf使用命中缓存的分配解析

    Netty分布式ByteBuf使用命中缓存的分配解析

    这篇文章主要为大家介绍了Netty分布式ByteBuf 使用命中缓存的分配解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Springboot @Value获取值为空问题解决方案

    Springboot @Value获取值为空问题解决方案

    这篇文章主要介绍了Springboot @Value获取值为空问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • MP(MyBatis-Plus)实现乐观锁更新功能的示例代码

    MP(MyBatis-Plus)实现乐观锁更新功能的示例代码

    这篇文章主要介绍了MP(MyBatis-Plus)实现乐观锁更新功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论