zoukankan      html  css  js  c++  java
  • SpringBoot项目使用Caffeine本地缓存

    环境配置:(或以上版本,必须)

    JDK 版本:1.8  
    Caffeine 版本:2.8.0
    SpringBoot 版本:2.2.2.RELEASE

    也可以不与SpringBoot结合

    1、添加maven依赖

    <dependency>
       <groupId>com.github.ben-manes.caffeine</groupId>
       <artifactId>caffeine</artifactId>
       <version>2.8.0</version>
    </dependency>
    

      

    2、添加配置类

    CacheConfig.java
    package com.example.demo.config;
    
    import com.github.benmanes.caffeine.cache.Cache;
    import com.github.benmanes.caffeine.cache.Caffeine;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.concurrent.TimeUnit;
    
    @Configuration
    public class CacheConfig {
    
        @Bean
        public Cache<String, Object> caffeineCache() {
            return Caffeine.newBuilder()
                    // 设置最后一次写入经过60s过期
                    .expireAfterWrite(60, TimeUnit.SECONDS)
                    // 初始的缓存空间大小
                    .initialCapacity(100)
                    // 缓存的最大条数
                    .maximumSize(1000)
                    .build();
        }
    }
    

     

    配置说明

    参数类型描述
    initialCapacity integer 初始的缓存空间大小
    maximumSize long 缓存的最大条数
    maximumWeight long 缓存的最大权重
    expireAfterWrite duration 最后一次写入后经过固定时间过期  (与expireAfterAccess 同时存在时,以 expireAfterWrite 为准)
    expireAfterAccess duration 最后一次访问后经过固定时间过期 (与expireAfterWrite 同时存在时,以 expireAfterWrite 为准)
    refreshAfterWrite duration 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
    weakKeys boolean 打开 key 的弱引用
    weakValues boolean 打开 value 的弱引用(与softValues不能同时使用)
    softValues boolean 打开 value 的软引用 (与weakValues不能同时使用)
    recordStats - 开发统计功能

    软引用: 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。

    弱引用: 弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存

    设置方式如下: 

    // 软引用
    Caffeine.newBuilder().softValues().build();
    
    // 弱引用
    Caffeine.newBuilder().weakKeys().weakValues().build();
    

      

    3、调用示例

     @Autowired
     Cache<String, Object> caffeineCache;
    
    
    // 加入缓存
    caffeineCache.put(key,value);
    
    
    // 先从缓存读取
     caffeineCache.getIfPresent(id);
    
    
    // 从缓存中删除
    caffeineCache.asMap().remove(key);
    

      

  • 相关阅读:
    函数调用栈的总结
    Calling convention-调用约定
    函数可以返回结构体的原因
    pthread_join/pthread_exit的用法解析
    线程退出的几种方式和资源回收【线程编程中避免内存泄漏】
    线程状态与tcb、线程的生命周期
    pthread_cleanup_push vs Autorelease VS 异常处理
    thread.h
    Thread Control Block
    线程与cpu
  • 原文地址:https://www.cnblogs.com/pxblog/p/12321500.html
Copyright © 2011-2022 走看看