zoukankan      html  css  js  c++  java
  • spring boot guava cache 缓存学习

    http://blog.csdn.net/hy245120020/article/details/78065676

    ************************************************************

    spring boot guava cache 缓存学习

    1. 自定义key
    2. 自定义全局key过期时间,缓存个数
    3. 针对单个key自定义过期时间,缓存个数

    引入依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>

    自定义key

     @Override
        @Cacheable(value = "user", key = "'user'.concat(#id.toString())")
        public User findUserById(Long id) {
            log.info("findUserById query from db, id: {}", id);
            return userMap.get(id);
        }
        @Override
        @CachePut(value = "user", key = "'user'.concat(#user.id.toString())")
        public void update(User user) {
            log.info("update db, user: {}", user.toString());
            userMap.put(user.getId(), user);
        }
    
        @Override
        @CacheEvict(value = "user", key = "'user'.concat(#id.toString())")
        public void remove(Long id) {
            log.info("remove from db, id: {}", id);
            userMap.remove(id);
        }

    自定义全局key过期时间,缓存个数

    package com.km.config;
    
    import com.google.common.cache.CacheBuilder;
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.cache.guava.GuavaCache;
    import org.springframework.cache.support.SimpleCacheManager;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    
    /**
     * <p>guava缓存配置</p>
     * Created by zhezhiyong@163.com on 2017/9/22.
     */
    @Configuration
    @EnableCaching
    public class GuavaConfig {
    
    
        /**
         * 配置全局缓存参数,3600秒过期,最大个数1000
         */
        @Bean
        public CacheManager cacheManager() {
            GuavaCacheManager cacheManager = new GuavaCacheManager();
            cacheManager.setCacheBuilder(CacheBuilder.newBuilder().expireAfterWrite(3600, TimeUnit.SECONDS).maximumSize(1000));
            return cacheManager;
        }
    
    }

    针对单个key自定义过期时间,缓存个数

    package com.km.config;
    
    import com.google.common.cache.CacheBuilder;
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.cache.guava.GuavaCache;
    import org.springframework.cache.support.SimpleCacheManager;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    
    /**
     * <p>guava缓存配置</p>
     * Created by zhezhiyong@163.com on 2017/9/22.
     */
    @Configuration
    @EnableCaching
    public class GuavaConfig {
    
        private static final int DEFAULT_MAXSIZE = 1000;
        private static final int DEFAULT_TTL = 3600;
    
        /**
         * 定义cache名称、超时时长秒、最大个数
         * 每个cache缺省3600秒过期,最大个数1000
         */
        public enum Caches {
            user(60, 2),
            info(5),
            role;
    
            Caches() {
            }
    
            Caches(int ttl) {
                this.ttl = ttl;
            }
    
            Caches(int ttl, int maxSize) {
                this.ttl = ttl;
                this.maxSize = maxSize;
            }
    
            private int maxSize = DEFAULT_MAXSIZE;    //最大數量
            private int ttl = DEFAULT_TTL;        //过期时间(秒)
    
            public int getMaxSize() {
                return maxSize;
            }
    
            public void setMaxSize(int maxSize) {
                this.maxSize = maxSize;
            }
    
            public int getTtl() {
                return ttl;
            }
    
            public void setTtl(int ttl) {
                this.ttl = ttl;
            }
        }
    
        /**
         * 个性化配置缓存
         */
        @Bean
        public CacheManager cacheManager() {
            SimpleCacheManager manager = new SimpleCacheManager();
            //把各个cache注册到cacheManager中,GuavaCache实现了org.springframework.cache.Cache接口
            ArrayList<GuavaCache> caches = new ArrayList<>();
            for (Caches c : Caches.values()) {
                caches.add(new GuavaCache(c.name(), CacheBuilder.newBuilder().recordStats().expireAfterWrite(c.getTtl(), TimeUnit.SECONDS).maximumSize(c.getMaxSize()).build()));
            }
            manager.setCaches(caches);
            return manager;
        }
    }

    配置yml

    server:
      port: 8080
    spring:
      cache:
        type: guava

    配置启动

    package com.km;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cache.annotation.EnableCaching;
    
    @SpringBootApplication
    @EnableCaching
    public class SpringBootGuavaCacheApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootGuavaCacheApplication.class, args);
        }
    }
  • 相关阅读:
    ASP.NET在禁用视图状态的情况下仍然使用ViewState对象【转】
    Atcoder Regular Contest 061 D Card Game for Three(组合数学)
    Solution 「CERC 2016」「洛谷 P3684」机棚障碍
    Solution 「CF 599E」Sandy and Nuts
    Solution 「洛谷 P6021」洪水
    Solution 「ARC 058C」「AT 1975」Iroha and Haiku
    Solution 「POI 2011」「洛谷 P3527」METMeteors
    Solution 「CF 1023F」Mobile Phone Network
    Solution 「SP 6779」GSS7
    Solution 「LOCAL」大括号树
  • 原文地址:https://www.cnblogs.com/zhao1949/p/8087049.html
Copyright © 2011-2022 走看看