欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot使用GuavaCache做簡單緩存處理的方法

 更新時間:2019年01月08日 10:17:23   作者:qianggetaba  
這篇文章主要介紹了springboot使用GuavaCache做簡單緩存處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

問題背景

實際項目碰到一個上游服務(wù)商接口有10秒的查詢限制(同個賬號)。

項目中有一個需求是要實時統(tǒng)計一些數(shù)據(jù),一個應(yīng)用下可能有多個相同的賬號。由于服務(wù)商接口的限制,當(dāng)批量查詢時,可能出現(xiàn)同一個賬號第一次查詢有數(shù)據(jù),但第二次查詢無數(shù)據(jù)的情況。

解決方案

基于以上問題,提出用緩存的過期時間來解決。

這時,可用Redis和Guava Cache來解決:

當(dāng)批量查詢時,同一個賬號第一次查詢有數(shù)據(jù)則緩存并設(shè)置過期時間10s, 后續(xù)查詢時直接從緩存中取,沒有再從服務(wù)商查詢。

最終采用Guava Cache來解決,原因是:

  • 應(yīng)用是部署單臺的,不會有分布式的問題
  • Redis雖然可以實現(xiàn),但會有通訊時間消耗
  • Guava Cache使用本地緩存,支持并發(fā)

使用GuavaCache可以快速建立緩存

1.需要在啟動類上注解@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 控制器測試類

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中的那個,具體看配置類
  @Cacheable(value = "GuavaCacheAll",key = "#name")
  public String tt(String name){
    System.out.println("in tt");
    return "name:"+name;
  }
}

Application.java springboot啟動類

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis-plugin插件執(zhí)行原理解析

    mybatis-plugin插件執(zhí)行原理解析

    這篇文章主要介紹了mybatis-plugin插件執(zhí)行原理,我們就需要來研究下Executor,ParameterHandler,ResultSetHandler,StatementHandler這4個對象的具體跟sql相關(guān)的方法,然后再進(jìn)行修改,就可以直接起到aop的作用,需要的朋友可以參考下
    2022-10-10
  • Java8新特性之Lambda表達(dá)式的使用

    Java8新特性之Lambda表達(dá)式的使用

    這篇文章主要介紹了Java8新特性之Lambda表達(dá)式的使用,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 基于java中byte數(shù)組與int類型的轉(zhuǎn)換(兩種方法)

    基于java中byte數(shù)組與int類型的轉(zhuǎn)換(兩種方法)

    下面小編就為大家?guī)硪黄趈ava中byte數(shù)組與int類型的轉(zhuǎn)換(兩種方法)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 一文帶你學(xué)習(xí)Java多維數(shù)組的使用技巧

    一文帶你學(xué)習(xí)Java多維數(shù)組的使用技巧

    Java作為一門廣泛應(yīng)用于各行各業(yè)的開發(fā)語言,具有豐富的數(shù)據(jù)類型支持,其中多維數(shù)組是其重要的一種,多維數(shù)組可以更加方便地組織數(shù)據(jù),提高Java應(yīng)用程序的效率,本文將為大家介紹Java中多維數(shù)組的基本概念和常用操作,助力讀者更好地掌握多維數(shù)組的使用技巧
    2023-11-11
  • spring事務(wù)@Transactional失效原因及解決辦法小結(jié)

    spring事務(wù)@Transactional失效原因及解決辦法小結(jié)

    今天就跟大家聊聊有關(guān)spring中@Transactional失效原因及解決辦法小結(jié),主要從三個方面考慮,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • java基于Socket做一個簡單下載器

    java基于Socket做一個簡單下載器

    這篇文章主要為大家詳細(xì)介紹了java如何基于Socket制作一個簡單下載器,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java基礎(chǔ)之關(guān)鍵字final詳解

    Java基礎(chǔ)之關(guān)鍵字final詳解

    這篇文章主要介紹了Java基礎(chǔ)之關(guān)鍵字final詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • 一起學(xué)JAVA基礎(chǔ)之運算符

    一起學(xué)JAVA基礎(chǔ)之運算符

    計算機的最基本用途之一就是執(zhí)行數(shù)學(xué)運算,作為一門計算機語言,Java也提供了一套豐富的運算符來操縱變量,下面這篇文章主要給大家介紹了關(guān)于JAVA基礎(chǔ)之運算符的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Java AQS中閉鎖CountDownLatch的使用

    Java AQS中閉鎖CountDownLatch的使用

    CountDownLatch 是一個同步工具類,用來協(xié)調(diào)多個線程之間的同步,它能夠使一個線程在等待另外一些線程完成各自工作之后,再繼續(xù)執(zhí)行。被將利用CountDownLatch實現(xiàn)網(wǎng)絡(luò)同步請求,異步同時獲取商品信息組裝,感興趣的可以了解一下
    2023-02-02
  • Java詳細(xì)分析梳理垃圾回收機制

    Java詳細(xì)分析梳理垃圾回收機制

    垃圾回收,顧名思義,便是將已經(jīng)分配出去的,但卻不再使用的內(nèi)存回收回來,以便能夠再次分配。在?Java?虛擬機的語境下,垃圾指的是死亡的對象所占據(jù)的堆空間
    2022-04-04

最新評論