好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

springboot使用GuavaCache做简单缓存处理的方法

问题背景

实际项目碰到一个上游服务商接口有10秒的查询限制(同个账号)。

项目中有一个需求是要实时统计一些数据,一个应用下可能有多个相同的账号。由于服务商接口的限制,当批量查询时,可能出现同一个账号第一次查询有数据,但第二次查询无数据的情况。

解决方案

基于以上问题,提出用缓存的过期时间来解决。

这时,可用redis和guava cache来解决:

当批量查询时,同一个账号第一次查询有数据则缓存并设置过期时间10s, 后续查询时直接从缓存中取,没有再从服务商查询。

最终采用guava cache来解决,原因是:

应用是部署单台的,不会有分布式的问题 redis虽然可以实现,但会有通讯时间消耗 guava cache使用本地缓存,支持并发

使用guavacache可以快速建立缓存

1.需要在启动类上注解@enablecaching
2.配置cachemanager
3.控制器上注解使用@cacheable

pom.xml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

<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 配置类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

package application.config;

 

import com.google测试数据mon.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 控制器测试类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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取得参数,根据参数name作为缓存的key,value是使用的缓存list中的那个,具体看配置类

   @cacheable (value = "guavacacheall" ,key = "#name" )

   public string tt(string name){

     system.out.println( "in tt" );

     return "name:" +name;

   }

}

application.java springboot启动类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

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);

   }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/c5113620/article/details/80802696

查看更多关于springboot使用GuavaCache做简单缓存处理的方法的详细内容...

  阅读:18次