springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法
問(wèn)題背景
實(shí)際項(xiàng)目碰到一個(gè)上游服務(wù)商接口有10秒的查詢限制(同個(gè)賬號(hào))。
項(xiàng)目中有一個(gè)需求是要實(shí)時(shí)統(tǒng)計(jì)一些數(shù)據(jù),一個(gè)應(yīng)用下可能有多個(gè)相同的賬號(hào)。由于服務(wù)商接口的限制,當(dāng)批量查詢時(shí),可能出現(xiàn)同一個(gè)賬號(hào)第一次查詢有數(shù)據(jù),但第二次查詢無(wú)數(shù)據(jù)的情況。
解決方案
基于以上問(wèn)題,提出用緩存的過(guò)期時(shí)間來(lái)解決。
這時(shí),可用Redis和Guava Cache來(lái)解決:
當(dāng)批量查詢時(shí),同一個(gè)賬號(hào)第一次查詢有數(shù)據(jù)則緩存并設(shè)置過(guò)期時(shí)間10s, 后續(xù)查詢時(shí)直接從緩存中取,沒(méi)有再?gòu)姆?wù)商查詢。
最終采用Guava Cache來(lái)解決,原因是:
- 應(yīng)用是部署單臺(tái)的,不會(huì)有分布式的問(wèn)題
- Redis雖然可以實(shí)現(xiàn),但會(huì)有通訊時(shí)間消耗
- Guava Cache使用本地緩存,支持并發(fā)
使用GuavaCache可以快速建立緩存
1.需要在啟動(dòng)類上注解@EnableCaching
2.配置CacheManager
3.控制器上注解使用@Cacheable
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
CacheConfig.java 配置類
package application.config;
import com.google.common.cache.CacheBuilder;
import org.springframework.cache.CacheManager;
import org.springframework.cache.guava.GuavaCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Configuration
public class CacheConfig {
public CacheManager cacheManager(){
GuavaCache guavaCache = new GuavaCache("GuavaCacheAll", CacheBuilder.newBuilder()
.recordStats()
.expireAfterWrite(10000, TimeUnit.SECONDS)
.build());
List list = new ArrayList();
list.add(guavaCache);
SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
simpleCacheManager.setCaches(list);
return simpleCacheManager;
}
}
TestController.java 控制器測(cè)試類
package application.controller;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping("/test")
//key是使用spEl取得參數(shù),根據(jù)參數(shù)name作為緩存的key,value是使用的緩存list中的那個(gè),具體看配置類
@Cacheable(value = "GuavaCacheAll",key = "#name")
public String tt(String name){
System.out.println("in tt");
return "name:"+name;
}
}
Application.java springboot啟動(dòng)類
package application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java程序開(kāi)發(fā)環(huán)境配置圖文教程
這篇文章主要為大家詳細(xì)介紹了Java程序開(kāi)發(fā)環(huán)境配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案
這篇文章主要介紹了SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Java解析Excel文件并把數(shù)據(jù)存入數(shù)據(jù)庫(kù)
本篇文章主要介紹了Java解析Excel文件并把數(shù)據(jù)存入數(shù)據(jù)庫(kù) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫(kù)連接池
這篇文章主要介紹了基于java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫(kù)連接池,Java通過(guò)使用mongo-2.7.3.jar包實(shí)現(xiàn)mongodb連接池,感興趣的小伙伴們可以參考一下2015-12-12
Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄
在某些情況下,需要在執(zhí)行新增后,需要獲取到新增行的id,這篇文章主要給大家介紹了關(guān)于Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Spring Boot集成Spring Cloud Security進(jìn)行安全增強(qiáng)的方法
Spring Cloud Security是Spring Security的擴(kuò)展,它提供了對(duì)Spring Cloud體系中的服務(wù)認(rèn)證和授權(quán)的支持,包括OAuth2、JWT等,這篇文章主要介紹了Spring Boot集成Spring Cloud Security進(jìn)行安全增強(qiáng),需要的朋友可以參考下2024-11-11

