java vo缓冲_springboot之本地缓存(guava与caffeine)

1. 场景描述

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

2.解决方案

2.1 使用google的guava作为本地缓存

初步的想法是使用google的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,在这里面的话,就只需要在配置文件里面定义类型就会自动注入了。

9329da7849be7695cd2116ec80f41fa2.png

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 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!

原文出处:https://www.cnblogs.com/ruanjianlaowang/p/11651943.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值