springboot之本地缓存(guava与caffeine)
admin
2023-02-20 15:00:09
0

1. 场景描述

因项目要使用本地缓存,具体为啥不用redis等,就不讨论,记录下过程,希望能帮到需要的朋友。

2.解决方案

2.1 使用guava作为本地缓存

初步的想法是使用guava,因为本身项目中就有guava的denpency。

2.1.1 pom文件

需要3个dependency,如下:

  
  
            org.springframework.boot
            spring-boot-starter-cache
  
  
    
            org.springframework
            spring-context-support
            4.3.18.RELEASE
  
   
   
                com.google.guava
                guava
                24.0-jre
     
2.1.2 java类

(1)GuavaCacheManager

新建bean,返回及配置guava的GuavaCacheManager。

import com.google.common.cache.CacheBuilder;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.guava.GuavaCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;
/**
* 
* @auther: 软件老王
*/
@Configuration
@EnableCaching
public class GuavaCacheConfig {

    @Bean
    public CacheManager cacheManager() {
        GuavaCacheManager cacheManager = new GuavaCacheManager();
        cacheManager.setCacheBuilder(
                CacheBuilder.newBuilder().
                        expireAfterWrite(6, TimeUnit.HOURS).
                        maximumSize(1000)); //软件老王,6小时过期,最大1000条
        return cacheManager;
    }
}

(2)spring注解标签使用缓存

/**
* 
* @auther: 软件老王
*/
  @Cacheable(value = "ruanjianlaowang")
    public VO getUserInfo(String token) {
        VO vo = userauthClient.verifyToken(token);
        return vo;
    }

guava本地缓存完成。

2.2 spring框架提供的本地缓存方案

spring中已经提供了抽象类,默认只需要配置加载jar包,配置type就可以了,但是从spring5开始,将guava的剔除掉了,替换成了caffeine,spring做了测试,作为本地缓存caffeine比guava要高出好多,我们也改成了caffeine作为本地缓存。

springboot与guava、caffeine等本地缓存,springboot1的时候还有guava,springboot2里面就把guava的缓存接口去掉了,所以前面guava本地缓存才需要定义Configuration,在这里面的话,就只需要在配置文件里面定义类型就会自动注入了。

springboot之本地缓存(guava与caffeine)

2.3 caffeine本地缓存
2.3.1 pom文件
        
       
            com.github.ben-manes.caffeine
            caffeine
            2.8.0
        
2.3.2 配置文件
spring:
   cache:
      type: caffeine
      cache-names: bc.gateway.ut
      caffeine:
#        spec: maximumSize=5000,expireAfterWrite=20s
         spec: maximumSize=5000,expireAfterAccess=3600s

具体参数含义

/**
* @auther: 软件老王
*/
• initialCapacity=[integer]: 初始的缓存空间大小
• maximumSize=[long]: 缓存的最大条数
• maximumWeight=[long]: 缓存的最大权重
• expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期
• expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期
• refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
2.3.3 使用方式还是spring的标签不用动:
/**
* 
* @auther: 软件老王
*/
  @Cacheable(value = "ruanjianlaowang")
    public VO getUserInfo(String token) {
        VO vo = userauthClient.verifyToken(token);
        return vo;
    }
2.4 关于spring缓存标签的说明

四个标签:

(1)@Cacheable,首先在缓存中查询,没有的话,进方法执行,执行完成后返回值放缓存;

(2)@CachePut,不进行查询判断,直接新增或者更新缓存内容,类似add或update;

(3)@CacheEvict,直接清除,类似delete。

(4)@Caching,1,2,3个组合

value 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 例如: @Cacheable(value=”laowang_cache1”) @Cacheable(value={””laowang_cache1,”laowang_cache2”}
key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 @Cacheable(value=”laowang_cache1”,key=”#userName”)
condition 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 @Cacheable(value=”laowang_cache1”, condition=”#userName.length()>11”)

I’m 「软件老王」,如果觉得还可以的话×××更新秒知!欢迎讨论×××

相关内容

热门资讯

洗衣机正常洗,水出不出去什么原... 这种情况原因有很多种,1、电机故障造成洗衣机不能脱水,洗衣机电动机有嗡嗡声响而不转动,多数是电动机匝...
半自动洗衣机排不出水是什么原因 1、排水管扭曲,保持排水管的畅通才能让洗衣机正常排水。2、排水缓慢时,有可能是因排水口过高,排水阀拉...
西门子洗衣机经常故障 西门子是全球著名的家电品牌,其洗衣机在国内市场也拥有广泛的用户群体。然而,近年来,一些西门子洗衣机用...
西门子洗衣机平衡自检故障 西门子洗衣机平衡自检故障是一种非常常见的问题,它通常是由于洗衣机内部出现平衡不良的问题导致的。当洗衣...
石化油服获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示石化油服(600871)新获得一项实用新型专利授权,专利名为“...
服务六大场景 机器人公园上岗 玉渊潭公园投用水面割草机器人。(刘平 摄) 天坛公园的智能巡护机器人上岗。(刘平 摄) 盛夏七月,...
力箭一号遥十五运载火箭圆满完成... 红星新闻网7月24日讯2026年7月24日07时33分,我国在东风商业航天创新试验区使用力箭一号遥十...
特朗普:美方正与伊朗谈判,不排... 当地时间7月24日,美国总统特朗普在白宫谈及对伊朗战争的“退出战略”时表示,美国有两种选择:一是继续...
小伙相亲2天后花33万闪婚,一... 极目新闻记者 邓波2025年4月,安徽安庆小伙何攀到贵州贵阳花果园相亲,并与相识两天的贵阳籍女子陆某...
丘成桐:王虹和邓煜都在MIT待... 当地时间7月23日,在美国费城举行的2026年国际数学家大会开幕式上,中国数学家邓煜、王虹获得菲尔兹...