spring boot guava cache 缓存学习

来源:互联网 发布:淘宝宝贝名称规则 编辑:程序博客网 时间:2024/05/29 14:32

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@EnableCachingpublic 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@EnableCachingpublic 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: 8080spring:  cache:    type: guava

配置启动

package com.km;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication@EnableCachingpublic class SpringBootGuavaCacheApplication {    public static void main(String[] args) {        SpringApplication.run(SpringBootGuavaCacheApplication.class, args);    }}




原创粉丝点击