• 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);
        }
    }
  • 相关阅读:
    把A数组中数据逐一赋值给B数组中某键值对
    根据A组数 筛选 B数组中的数据
    简单的下拉框组件(原生)
    数据扩样处理
    ng组件间传值 (dx01 父子间传值)
    npm ERR! Unexpected string in JSON at position 159827 while parsing XXXX
    ng-cli 中使用ace编辑器演示echarts
    第7章、扩展
    第6章、Kafka Streams
    第4章 Kafka API实战
  • 原文地址:https://www.cnblogs.com/zhao1949/p/8087049.html
Copyright © 2020-2023  润新知