中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot整合GuavaCache緩存過程解析

發布時間:2020-10-01 21:53:40 來源:腳本之家 閱讀:229 作者:泡椒炒甜瓜 欄目:編程語言

這篇文章主要介紹了springboot整合GuavaCache緩存過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Guava Cache是一種本地緩存機制,之所以叫本地緩存,是因為它不會把緩存數據放到外部文件或者其他服務器上,而是存放到了應用內存中。

Guava Cache的優點是:簡單、強大、輕量級。

GuavaCache適用場景:

1.某些接口或者鍵值會被查詢多次以上;

2.愿意使用或犧牲一些內存空間來提升訪問或者計算速度;

3.緩存內容或者結果值較小,不會超過內存總容量;

GuavaCache中基于注解的聲明式緩存操作

@Cacheable 觸發緩存邏輯

Spring 在執行 @Cacheable 標注的方法前先查看緩存中是否有數據,如果有數據,則直接返回緩存數據;若沒有數據,執行該方法并將方法返回值放進緩存。

參數: value緩存名、 key緩存鍵值、 condition滿足緩存條件、unless否決緩存條件

@CacheEvict

觸發緩存逐出邏輯

方法執行成功后會從緩存中移除相應數據。

參數: value緩存名、 key緩存鍵值、 condition滿足緩存條件、 unless否決緩存條件、 allEntries是否移除所有數據 (設置為true時會移除所有緩存)

@CachePut

和 @Cacheable 類似,但會把方法的返回值放入緩存中, 主要用于數據新增和修改方法。

pom.xml配置文件:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-cache</artifactId>
  <version>1.5.9.RELEASE</version>
</dependency>

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>19.0</version>
</dependency>

GuavaCacheConfig:

/**
 * Copyright (c) 2020, All Rights Reserved.
 *
*/

package com.demo.server.config;

import java.util.concurrent.TimeUnit;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.guava.GuavaCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.google.common.cache.CacheBuilder;


@Configuration
@EnableCaching
public class GuavaCacheConfig {
  
  @Bean
  public CacheManager cacheManager() { 
    GuavaCacheManager cacheManager = new GuavaCacheManager();
    cacheManager.setCacheBuilder(
      CacheBuilder.newBuilder().
      expireAfterWrite(10, TimeUnit.SECONDS). //存活時間10秒
      maximumSize(1000));   //最大線程數
    return cacheManager;
  }
}

CacheController:

/**
 * Copyright (c) 2020, All Rights Reserved.
 *
*/

package com.demo.server.guava;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/guava")
public class CacheController {
  
  @Autowired
  private CacheService cacheService;

  /**
   * 查詢方法
   */
  @RequestMapping(value = "/get", method = RequestMethod.GET)
  public String getByCache() {
    Long startTime = System.currentTimeMillis();
    long timestamp = this.cacheService.getByCache();
    Long endTime = System.currentTimeMillis();
    System.out.println("耗時: " + (endTime - startTime));
    return timestamp+"";
  }

  /**
   * 保存方法
   */
  @RequestMapping(value = "/save", method = RequestMethod.POST)
  public void save() {
    this.cacheService.save();
  }

  /**
   * 刪除方法
   */
  @RequestMapping(value = "delete", method = RequestMethod.DELETE)
  public void delete() {
    this.cacheService.delete();
  }
}

CacheService:

/**
 * Copyright (c) 2020, All Rights Reserved.
 *
*/

package com.demo.server.guava;

import java.sql.Timestamp;

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;


@Service
public class CacheService {

  @CachePut(value = "guavacache")
  public long save() {
    long timestamp = new Timestamp(System.currentTimeMillis()).getTime();
    System.out.println("進行緩存:" + timestamp);
    return timestamp;
  }
 
  @CacheEvict(value = "guavacache")
  public void delete() {
    System.out.println("刪除緩存");
  }
 
  @Cacheable(value = "guavacache")
  public long getByCache() {
    try {
      Thread.sleep(3 * 1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return new Timestamp(System.currentTimeMillis()).getTime();
  }

}

Application:

package com.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
  private static final Logger LOG = LoggerFactory.getLogger(Application.class);

  public static void main(String[] args) {
    SpringApplication app = new SpringApplication(Application.class);
    app.setBannerMode(Banner.Mode.OFF);
    app.setWebEnvironment(true);
    app.run(args);
    LOG.info("**************** Startup Success ****************");
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡阳县| 贵南县| 绥化市| 临夏市| 盐源县| 乐亭县| 鱼台县| 泽库县| 边坝县| 舞阳县| 金山区| 云南省| 绿春县| 弥渡县| 金平| 若羌县| 潜山县| 林口县| 邹城市| 拉萨市| 定日县| 达拉特旗| 容城县| 柞水县| 扬州市| 彭山县| 辽源市| 辉县市| 塔城市| 开原市| 呼伦贝尔市| 武夷山市| 潍坊市| 巢湖市| 云南省| 公主岭市| 临澧县| 邵武市| 永昌县| 晋城| 颍上县|