【SpringBoot】Guava包Cache缓存的使用

文章目录

引言

场景:通过Guava Cache对DB中的数据进行缓存应用。

优点:使用 Guava Cache 结合数据库进行缓存,可以显著提高应用的性能,减少对数据库的频繁访问。

步骤

  • 添加 Guava 依赖
  • 创建缓存
  • 实现缓存逻辑
  • 结合数据库

添加 Guava 依赖

首先,在你的项目中添加 Guava 依赖。如果你使用的是 Maven,添加以下依赖到你的 pom.xml 文件中

xml 复制代码
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>29.0-jre</version> 
</dependency>
// springboot环境版本:2.1.15

创建缓存

使用 CacheBuilder 来创建缓存实例。可以根据需要配置缓存的大小、过期时间等。

java 复制代码
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

import java.util.concurrent.TimeUnit;

public class CacheExample {
    // 创建缓存实例
    private static final Cache<String, Object> cache = CacheBuilder.newBuilder()
            .maximumSize(1000) // 最大缓存条目数
            .expireAfterWrite(10, TimeUnit.MINUTES) // 缓存过期时间
            .build();

    public static Cache<String, Object> getCache() {
        return cache;
    }
}

实现缓存逻辑

创建一个方法来处理从缓存加载数据的逻辑。如果缓存中没有数据,则从数据库加载并放入缓存中。

java 复制代码
import java.util.Optional;

public class DataService {

    // 模拟数据库访问方法
    private Object getDataFromDatabase(String key) {
        // 这里实现从数据库获取数据的逻辑
        return new Object(); // 示例返回值
    }

    // 从缓存或数据库获取数据
    public Object getData(String key) {
        Cache<String, Object> cache = CacheExample.getCache();

        // 从缓存中获取数据
        Object value = cache.getIfPresent(key);

        if (value == null) {
            // 如果缓存中没有数据,从数据库获取
            value = getDataFromDatabase(key);

            // 将数据放入缓存
            cache.put(key, value);
        }

        return value;
    }
}

结合数据库

将缓存逻辑与数据库访问结合起来。如下示例展示了如何使用缓存来减少对数据库的频繁访问。

java 复制代码
public class Main {
    public static void main(String[] args) {
        DataService dataService = new DataService();

        // 第一次访问,缓存中没有数据,从数据库加载
        Object data1 = dataService.getData("key1");
        System.out.println("First access: " + data1);

        // 第二次访问,缓存中有数据,直接从缓存获取
        Object data2 = dataService.getData("key1");
        System.out.println("Second access: " + data2);

        // 模拟一段时间后,缓存过期,再次从数据库加载
        try {
            Thread.sleep(11 * 60 * 1000); // 等待 11 分钟
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        Object data3 = dataService.getData("key1");
        System.out.println("After cache expiration: " + data3);
    }
}
相关推荐
虫师c39 分钟前
分布式缓存实战:Redis集群与性能优化
redis·分布式·缓存·redis集群·高可用架构·生产环境·数据分片
心勤则明3 小时前
Spring AI 会话记忆实战:从内存存储到 MySQL + Redis 双层缓存架构
人工智能·spring·缓存
小咕聊编程3 小时前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
西瓜er11 小时前
JAVA:Spring Boot 集成 FFmpeg 实现多媒体处理
java·spring boot·ffmpeg
EnCi Zheng12 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
Lisonseekpan13 小时前
Guava Cache 高性能本地缓存库详解与使用案例
java·spring boot·后端·缓存·guava
我真的是大笨蛋13 小时前
Redis的String详解
java·数据库·spring boot·redis·spring·缓存
sg_knight14 小时前
Spring Cloud与RabbitMQ深度集成:从入门到生产级实战
java·spring boot·spring·spring cloud·消息队列·rabbitmq·stream
低调小一15 小时前
LRU缓存科普与实现(Kotlin 与 Swift)
开发语言·缓存·kotlin
Chan1615 小时前
批处理优化:从稳定性、性能、数据一致性、健壮性、可观测性五大维度,优化批量操作
java·spring boot·后端·性能优化·java-ee·intellij-idea·优化