SpringBoot 集成 Caffeine

Caffeine 和 Spring Cache 依赖,使用注解方法实现缓存

依赖

<!--提供 Spring Boot 中的缓存支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency> <!-- Caffeine Cache 的具体实现-->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>

配置缓存

1,Config
package com.james.config;

import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit; @Configuration
@EnableCaching
public class CacheConfig { //通过 Caffeine.newBuilder() 构建一个 Caffeine 实例,并设置最大大小为 500 个条目,过期时间为 600 秒
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
cacheManager.setCaffeine(Caffeine.newBuilder()
.initialCapacity(1000) //// 初始的缓存空间大小
.maximumSize(500) // // 缓存的最大条数
.expireAfterAccess(60, TimeUnit.SECONDS)); // 设置最后一次写入或访问后经过固定时间过期
return cacheManager;
}
}
2,yml
spring:
#通过 spec 属性指定了缓存的一些属性,比如最大大小为 500 个条目,并设置了过期时间为 600 秒 2选一
cache:
caffeine:
spec: maximumSize=500,expireAfterAccess=600s

注解集成

@Cacheable:将方法的返回值缓存起来,并在后续对同样的方法进行调用时,直接返回缓存中的结果,而不会执行方法的实际逻辑;

//那么方法的返回值会被缓存在名为 “myCache” 的缓存中,而不会根据方法的参数进行细分。
//这种方式适用于方法的返回值在不同参数下是相同的,或者不关心具体的参数对应的缓存
  @Cacheable(cacheNames = "myCache")
public String getCachedData(String key) {
// 从数据库或其他数据源获取数据
return data;
}
 //则可以根据方法的参数进行细分缓存。每个不同的 Id 参数会对应一个不同的缓存键,从而实现了更精确的缓存控制。
//这种方式适用于每个参数对应的结果可能不同,或者需要根据不同的参数缓存不同的结果。
  @Cacheable(value = "listTypeBook", key = "#Id")
public List<BookEntity> listTypeBook(Integer Id) {
List<BookEntity> bookEntities = bookMapper.listTypeBook(Id);
return bookEntities;
}

@CachePut:用于更新或添加缓存的值。无论缓存是否已存在,该方法都会执行,并将结果放入缓存中;

//方法 updateCache() 将通过 key 更新名为 “myCache” 的缓存的值
//无论是添加缓存还是更新缓存,都会执行方法体内的逻辑,并将结果更新到缓存中
@CachePut(cacheNames = "myCache", key = "#key")
public String updateCache(String key, String value) {
// 更新数据
return updatedData;
}

@CacheEvict:用于从缓存中删除数据。使用该注解会删除指定缓存名称中的一个或多个缓存条目;

//方法 evictCache() 将从名为 “myCache” 的缓存中删除具有指定 key 的缓存条目
@CacheEvict(cacheNames = "myCache", key = "#key")
public void evictCache(String key) {
// 删除数据
}

只引入 Caffeine 依赖,然后使用 Caffeine 方法实现缓存

<!--        Caffeine Cache 的具体实现-->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
config
@Configuration
public class CacheConfig {
@Bean
public Cache<String, Object> caffeineCache() {
return Caffeine.newBuilder()
// 设置最后一次写入或访问后经过固定时间过期
.expireAfterWrite(60, TimeUnit.SECONDS)
// 初始的缓存空间大小
.initialCapacity(100)
// 缓存的最大条数
.maximumSize(1000)
.build();
}
@Bean
public Cache<Integer, List<BookEntity>> caffeineCache3() {
return Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
}
}
代码
    @Resource
Cache<Integer, List<BookEntity>> caffeineCache1;
@Resource
Cache<String, Object> caffeineCache; //查
@Override
public List<BookEntity> listTypeBook1(Integer id) {
// 从缓存中获取集合对象
List<BookEntity> cachedList = caffeineCache1.getIfPresent(id);
if (cachedList != null) {
return cachedList;
} // 如果缓存中不存在,则从数据库中获取集合对象
List<BookEntity> bookEntities = bookMapper.listTypeBook(id); // 将集合对象保存到缓存中
caffeineCache1.put(id, bookEntities); return bookEntities;
} // 添加缓存项
caffeineCache1.put(1, books); // 修改缓存项
caffeineCache1.put(1, updatedBooks); // 删除缓存项
caffeineCache1.invalidate(1);

Caffeine Cache缓存的更多相关文章

  1. 本地缓存解决方案-Caffeine Cache

    1.1 关于Caffeine Cache ​ Google Guava Cache是一种非常优秀本地缓存解决方案,提供了基于容量,时间和引用的缓存回收方式.基于容量的方式内部实现采用LRU算法,基于引 ...

  2. Spring Cache缓存技术的介绍

    缓存用于提升系统的性能,特别适用于一些对资源需求比较高的操作.本文介绍如何基于spring boot cache技术,使用caffeine作为具体的缓存实现,对操作的结果进行缓存. demo场景 本d ...

  3. 如何把 Caffeine Cache 用得如丝般顺滑?

    一.关于 Caffeine Cache 在推荐服务中,虽然允许少量请求因计算超时等原因返回默认列表.但从运营指标来说,越高的"完算率"意味着越完整的算法效果呈现,也意味着越高的商业 ...

  4. SpringBoot项目使用Caffeine本地缓存

    环境配置:(或以上版本,必须) JDK 版本:1.8  Caffeine 版本:2.8.0SpringBoot 版本:2.2.2.RELEASE 也可以不与SpringBoot结合 1.添加maven ...

  5. Spring Cache缓存框架

    一.序言 Spring Cache是Spring体系下标准化缓存框架.Spring Cache有如下优势: 缓存品种多 支持缓存品种多,常见缓存Redis.EhCache.Caffeine均支持.它们 ...

  6. 注释驱动的 Spring cache 缓存介绍

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  7. Windows Azure Cloud Service (43) 使用Azure In-Role Cache缓存(2)Dedicated Role

    <Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...

  8. [转]注释驱动的 Spring cache 缓存介绍

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...

  9. paip.cache 缓存架构以及性能提升总结

    paip.cache 缓存架构以及性能提升总结 1         缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...

  10. Cache缓存对象缓存对象

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoCache.aspx ...

随机推荐

  1. ApiPost发送请求报错UT000036: Connection terminated parsing multipart data

    发送请求报错Caused by: java.io.IOException: UT000036: Connection terminated parsing multipart data 这个报错是因为 ...

  2. 【短道速滑十一】标准的Gabor滤波器及Log_Gabor滤波器的实现、解析、速度优化及其和Halcon中gen_gabor的比较。

    最近有朋友在研究Halcon中gen_gabor的函数,和我探讨,因为我之前也没有怎么去关注这个函数,因此,前前后后大概也折腾了有一个星期去模拟实现这个东西,虽然最终没有实现这个函数,但是也是有所收获 ...

  3. SpringBoot自动配置原理解析

    1: 什么是SpringBoot自动配置 首先介绍一下什么是SpringBoot,SpringBoost是基于Spring框架开发出来的功能更强大的Java程序开发框架,其最主要的特点是:能使程序开发 ...

  4. Educational Codeforces Round 148 [Rated for Div. 2]A~C

    A #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 60; char c ...

  5. P1144 最短路计数 题解

    Problem 考察算法:拓扑排序 + \(DP\) + \(Dijkstra\). 题目简述 给出一个无向无权图,问从顶点 \(1\) 开始,到其他每个点的最短路有几条. 思路 先求出 \(1\) ...

  6. JVM指令分析

    代码: 1 public class AppGo{ 2 public static void test() { 3 boolean flag = true; 4 if (flag) System.ou ...

  7. SQL改写案例2

    postgresql 并没有像 oracle .dm 有这么丰富的 hint,在不改 sql 的情况下能干预执行计划. 如果想学好 postgresql.kingbase.MySQL  的sql 调优 ...

  8. SNN_文献阅读_Recent Advances and New Frontiers in Spiking Neural Networks

    Recent Advances and New Frontiers in Spiking Neural Networks 基本要素:包括神经元模型.神经元中脉冲序列的编码方法.神经网络中每个基本层的拓 ...

  9. HTML基础_01

    HTML 基础_01 01.初识 HTML 什么是 HTML! Hyper Text Markup Language(超文本标记语言).超文本包括文字.图片.音频.视频.动画等. HTML5,提供了一 ...

  10. tortoiseGit教程(常用图文教程)

    需求: gitTorise是git的比较好用的一个图形化工具,本文目的在于对tortoiseGit常见使用进行一个总结. 对于git常见的使用有: 1. 建立仓库 2. 提交代码 3. 更新代码 4. ...