spring boot caffeine cache 缓存学习

来源:互联网 发布:java 开发棋牌类游戏 编辑:程序博客网 时间:2024/05/29 14:12

spring boot caffeine cache 缓存学习

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

配置

  • yml配置:
    • 优点:简单
    • 缺点:无法针对每个cache配置不同的参数,比如过期时间、最大个数
  • java配置
    • 优点:可以针对每个cache配置不同的参数,比如过期时间、最大个数
    • 缺点:java代码

引入依赖

    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-cache</artifactId>    </dependency>    <dependency>        <groupId>com.github.ben-manes.caffeine</groupId>        <artifactId>caffeine</artifactId>    </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);    }

java配置

package com.km.config;import com.github.benmanes.caffeine.cache.Caffeine;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.EnableCaching;import org.springframework.cache.caffeine.CaffeineCache;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>java方式:caffeine缓存配置</p> * Created by zhezhiyong@163.com on 2017/9/22. */@Configuration@EnableCachingpublic class CacheConfig {    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中,CaffeineCache实现了org.springframework.cache.Cache接口        ArrayList<CaffeineCache> caches = new ArrayList<>();        for (Caches c : Caches.values()) {            caches.add(new CaffeineCache(c.name(),                    Caffeine.newBuilder().recordStats()                            .expireAfterWrite(c.getTtl(), TimeUnit.SECONDS)                            .maximumSize(c.getMaxSize())                            .build())            );        }        manager.setCaches(caches);        return manager;    }}

yml配置

server:  port: 8080spring:  cache:    caffeine:      spec: maximumSize=500,expireAfterWrite=5s    type: caffeine    cache-names:      - user      - info

配置启动

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

示例

点击下载源码,如果对你有帮助请赏赐一个star

原创粉丝点击