zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
    View Code

    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();
        }
    }
    View Code

    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();
        }
    
    }
    View Code

    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 ****************");
        }
    }
    View Code
  • 相关阅读:
    POJ2993——Emag eht htiw Em Pleh(字符串处理+排序)
    POJ2109——Power of Cryptography
    POJ2993——Help Me with the Game(字符串处理+排序)
    POJ1573——Robot Motion
    POJ2632——Crashing Robots
    POJ1068——Parencodings
    POJ3295——Tautology
    POJ2506——Tiling
    POJ2524——Ubiquitous Religions
    性能问题“三板斧”
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/12319639.html
Copyright © 2011-2022 走看看