springboot整合guava实现本地缓存

一、Springboot缓存

SpringBoot支持很多种缓存方式:redis、guava、ehcahe、jcache等等。

二、guava介绍

Guava Cache 是 Google 开源的一套开发工具集合,Guava Cache 是其中的一个专门用于处理本地缓存的轻量级框架,是全内存方式的本地缓存,而且是线程安全的。 和 ConcurrentMap 相比,Guava Cache 可以限制内存的占用,并可设置缓存的过期时间,可以自动回收数据,而 ConcurrentMap 只能通过静态方式来控制缓存,移除数据元素需要显示的方式来移除。

三、 缓存回收方式

1、基于容量回收

2、基于时间回收

3、基于引用回收

CacheBuilder.weakValues():和 CacheBuilder.weakKeys() 方法类似,该方法按照弱引用方式来存储缓存项的值,允许系统垃圾回收时回收缓存项。 CacheBuilder.weakValues(),使用软引用方式来包装缓存值,只有在内存需要时(一般在接近内存溢出时),系统会按照全局LRU(least-recently-used)原则进行垃圾回收。考虑到垃圾回收的性能问题,推荐使用基于容量的回收方式。

4、手动回收

guava使用

导入依赖

com.google.guava

guava

20.0

recordStats:开启统计功能 stats:查看统计情况

void testRecordStats(){

Cache callCache = CacheBuilder.newBuilder().

initialCapacity(5)

.maximumSize(100)

.recordStats()

.expireAfterAccess(1, TimeUnit.SECONDS)

.build();

/**

* CacheStats{hitCount=0, missCount=0, loadSuccessCount=0, loadExceptionCount=0, totalLoadTime=0, evictionCount=0}

*/

CacheStats stats = callCache.stats();

System.out.println(stats);

}

并发级别 调整concurrencyLevel即可

5、代码实例

/**

* @Author sprem至尊

* @Date 2022/10/24 19:39

* @Version 1.0

*/

package com.cn.xiaonuo.modular.wechat.cache;

import com.google.common.cache.CacheBuilder;

import com.google.common.cache.CacheLoader;

import com.google.common.cache.LoadingCache;

import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component

public class TokenCache {

private static LoadingCache loadingCache = CacheBuilder

.newBuilder().initialCapacity(100).maximumSize(100)

.expireAfterWrite(7000, TimeUnit.SECONDS)

.build(new CacheLoader() {

@Override

public String load(String key) throws Exception {

return null;

}

});

public static void setKey(String key,String value){

loadingCache.put(key, value);

}

public static String getValue(String key){

String value = null;

try{

value = loadingCache.get(key);

if(value == null){

return null;

}

return value;

}catch (Exception e){

return null;

}

}

}

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。