springboot整合guava实现本地缓存的示例代码

 更新时间:2025年06月18日 10:50:40   作者:spream至尊  
本文主要介绍了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使用

导入依赖

 <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>20.0</version>
 </dependency>

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

void testRecordStats(){
        Cache<String, String> 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<String,String> loadingCache = CacheBuilder
            .newBuilder().initialCapacity(100).maximumSize(100)
            .expireAfterWrite(7000, TimeUnit.SECONDS)
            .build(new CacheLoader<String, String>() {
                @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;
        }

    }
}

到此这篇关于springboot整合guava实现本地缓存的示例代码的文章就介绍到这了,更多相关springboot guava本地缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在JAR文件中找不到主清单属性的原因与解决方案

    在JAR文件中找不到主清单属性的原因与解决方案

    在Java中,一个JAR文件通常包含一个名为MANIFEST.MF的清单文件,这个文件定义了关于JAR文件的各种元数据,然而,有时我们可能会遇到一个问题,那就是在JAR文件中找不到主清单属性,本文给大家介绍了JAR文件中找不到主清单属性的原因和解决方案,需要的朋友可以参考下
    2024-04-04
  • java设计模式之观察者模式学习

    java设计模式之观察者模式学习

    这篇文章主要为大家详细介绍了java设计模式之观察者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Intellij IDEA 2020.3 配置教程详解

    Intellij IDEA 2020.3 配置教程详解

    这篇文章主要介绍了Intellij IDEA 2020.3 配置教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • java中volatile关键字的作用详解

    java中volatile关键字的作用详解

    这篇文章主要介绍了java中volatile关键字的作用详解,volatile可以保证,若一个线程改变了某块内存的值,其他线程是可见的,以至于其他线程能及时更新这块内存,需要的朋友可以参考下
    2023-09-09
  • springboot 使用zookeeper实现分布式队列的基本步骤

    springboot 使用zookeeper实现分布式队列的基本步骤

    这篇文章主要介绍了springboot 使用zookeeper实现分布式队列,通过ZooKeeper的协调和同步机制,多个应用程序可以共享一个队列,并按照先进先出的顺序处理队列中的消息,需要的朋友可以参考下
    2023-08-08
  • Java JDK动态代理的基本原理详细介绍

    Java JDK动态代理的基本原理详细介绍

    这篇文章主要介绍了Java JDK动态代理的基本原理详细介绍的相关资料,这里对动态代理进行了详解并附简单实例代码,需要的朋友可以参考下
    2017-01-01
  • springboot项目访问静态资源的配置代码实例

    springboot项目访问静态资源的配置代码实例

    这篇文章主要介绍了springboot项目访问静态资源的配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring Boot异步调用@Async过程详解

    Spring Boot异步调用@Async过程详解

    这篇文章主要介绍了Spring Boot异步调用@Async过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • RocketMQ事务消息图文示例讲解

    RocketMQ事务消息图文示例讲解

    RocketMQ事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布式事务功能,通过事务消息能达到分布式事务的最终一致
    2022-12-12
  • 详解如何在SpringBoot中实现优雅关闭

    详解如何在SpringBoot中实现优雅关闭

    这篇文章主要介绍了如何在SpringBoot中实现优雅关闭,SpringBoot应用程序的关闭可以是崩溃,也可以是手动关闭的,Shutdown、Crash 和 Graceful 之间的区别在于,它控制决定了我们可以用这个事件做什么,本文中,一起研究下Spring Boot提供的开箱即用功能之一:优雅关闭
    2024-09-09

最新评论