IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java】SpringBoot使用caffeine构建缓存带实例源码 -> 正文阅读

[Java知识库]【Java】SpringBoot使用caffeine构建缓存带实例源码

一、什么是caffeine

Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。

缓存和ConcurrentMap有点相似,但还是有所区别。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的元素,直到它们被从缓存当中手动移除。但是,Caffeine的缓存Cache 通常会被配置成自动驱逐缓存中元素,以限制其内存占用。在某些场景下,LoadingCacheAsyncLoadingCache 因为其自动加载缓存的能力将会变得非常实用。

Caffeine提供了灵活的构造器去创建一个拥有下列特性的缓存:

  • 自动加载元素到缓存当中,异步加载的方式也可供选择
  • 当达到最大容量的时候可以使用基于就近度和频率的算法进行基于容量的驱逐
  • 将根据缓存中的元素上一次访问或者被修改的时间进行基于过期时间的驱逐
  • 当向缓存中一个已经过时的元素进行访问的时候将会进行异步刷新
  • key将自动被弱引用所封装
  • value将自动被弱引用或者软引用所封装
  • 驱逐(或移除)缓存中的元素时将会进行通知
  • 写入传播到一个外部数据源当中
  • 持续计算缓存的访问统计指标

二、SpringBoot整合caffeine

1. SpringBoot项目基础运行

本次项目基于SpringBoot官方rest接口示例的完成部分进行演示

spring-guides/gs-rest-service: Building a RESTful Web Service :: Learn how to create a RESTful web service with Spring. (github.com)

这里我们使用完成部分 gs-rest-service/complete at main · spring-guides/gs-rest-service (github.com)

image-20211026103802022

为了不和本地项目发生端口冲突,在项目中添加配置文件,修改端口号

image-20211026104557347

server:
  port: 8100
  servlet:
    encoding:
      charset: UTF-8
      force: true

先运行项目试试

./mvnw spring-boot:run

image-20211026105551691

2. 基于maven安装caffeine

目前caffeine的版本是3.0.4

com.github.ben-manes.caffeine : caffeine : 3.0.4 - Maven Central Repository Search

添加依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
  <groupId>com.github.ben-manes.caffeine</groupId>
  <artifactId>caffeine</artifactId>
  <version>3.0.4</version>
</dependency>

安装依赖

IDEA会帮我们完成依赖的安装。。。

image-20211027170636369

3. 缓存注解说明

我们通过一个路由设置缓存,并通过一个路由读取缓存

SpringBoot调用Caffeine,使用的是通用的缓存注解。

Cache Providers的加载顺序如下

image-20211028113053448

我们使用的注解为

  • @CacheEvict 主动清除缓存

  • @Cacheable 获取缓存

  • 在类上的注解 @EnableCaching 表示开启缓存

业务上的流程为

  1. Cacheable 从缓存取数据,没有就按业务拿到数据,并保存到缓存,返回数据 相当于 getOrSet
  2. CacheEvict 写入业务中触发清理缓存

4. 实际代码

1)修改配置文件application.yml

增加缓存配置

server:
  port: 8100
  servlet:
    encoding:
      charset: UTF-8
      force: true
spring:
  cache:
    type: caffeine

2) 类的注解 @EnableCaching 启用缓存

@EnableCaching
public class CacheController {

3) 方法的获取缓存 @Cacheable

我这里简化了内部逻辑,每次返回一个随机的数字,如果有缓存就会一直返回同一个数字。

    @GetMapping("/cache")
    @Cacheable(cacheNames = {"cache"})
    public double cacheSet(@RequestParam(value = "key") String key){
        return Math.random();
    }

4) 主动清理缓存 @CacheEvict

这里也使用get的原因是为了方便调试。

    @GetMapping("/cache/clear")
    @CacheEvict(cacheNames = {"cache"})
    public void cacheClear(@RequestParam(value = "key") String key){

    }

5. 运行效果

运行项目

./mvnw spring-boot:run

本地访问 http://localhost:8100/cache?key=diandianxiyu_geek

多次访问,发现得到的是相同的结果,表示缓存成功读取

image-20211028143958935

访问清理缓存地址 http://localhost:8100/cache/clear?key=diandianxiyu_geek

因为没有设置返回值,所以没有输出

再次访问http://localhost:8100/cache?key=diandianxiyu_geek 发现结果发生变化,表示缓存已被清理,并重建。

image-20211028144151413

6. 本文项目源码

本文项目源码已经托管在codechina上,可以直接克隆并运行。

小雨同学的服务器果然有问题 / springboot-caffeine · CODE CHINA (csdn.net)

三、参考资料

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 12:51:50  更:2021-10-29 12:52:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:19:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码