首页 > 其他分享 >Spring Cache

Spring Cache

时间:2024-10-30 21:01:56浏览次数:5  
标签:缓存 Spring Cache 查询 key import 注解

1.介绍

Spring Cache是Spring提供的一个缓存框架,基于AOP原理,实现了基于注解的缓存功能,只需要简单地加一个注解就能实现缓存功能,对业务代码的侵入性很小。

1.常用注解

@EnableCaching:开启缓存注解功能
@Cacheable:查询数据时缓存,将方法的返回值进行缓存。
@CacheEvict:用于删除缓存,将一条或多条数据从缓存中删除。
@CachePut:用于更新缓存,将方法的返回值放到缓存中
@Caching:组合多个缓存注解;
@CacheConfig:统一配置
@Cacheable中的value值

2.基本使用

1.导入jar包

基于SpringBoot使用Spring Cache非常简单,首先加入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
    <version>2.7.10</version>
</dependency>

2.查询数据时缓存

下边使用Cacheable注解实现查询服务信息时对服务信息进行缓存,它的执行流程是:第一次查询服务信息缓存中没有该服务的信息此时去查询数据库,查询数据库拿到服务信息并进行缓存,第二次再去查询该服务信息发现缓存中有该服务的信息则直接查询缓存不再去数据库查询。


添加@EnableCaching:开启缓存注解功能

/**
 * 查询区域服务信息并进行缓存
 * @param id 对应serve表的主键
 * @return 区域服务信息
 */
Serve queryServeByIdCache(Long id);
@Override
public Serve queryServeByIdCache(Long id) {
    return getById(id);
}

Cacheable注解配置的两项参数说明:

value:缓存的名称,缓存名称作为缓存key的前缀。

key: 缓存key,支持SpEL表达式,上述代码表示取参数id的值作为key

最终缓存key为:缓存名称+“::”+key,例如:上述代码id为123,最终的key为:JZ_CACHE:SERVE_RECORD::123

SpEL(Spring Expression Language)是一种在 Spring 框架中用于处理字符串表达式的强大工具,它可以实现获取对象的属性,调用对象的方法操作。

keyGenerator:指定一个自定义的键生成器(实现 org.springframework.cache.interceptor.KeyGenerator 接口的类),用于生成缓存的键。与 key 属性互斥,二者只能选其一。

3.测试

package com.jzo2o.foundations.service;

import com.jzo2o.common.model.PageResult;
import com.jzo2o.foundations.model.domain.Serve;
import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO;
import com.jzo2o.foundations.model.dto.response.*;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.Assert;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;

@SpringBootTest
@Slf4j
class IServeServiceTest {

//区域服务查询
@Test
public void test_queryServeByIdCache(){
    Serve serve = serveService.queryServeByIdCache(1693815623867506689L);
    Assert.notNull(serve,"服务为空");
}

4.结果

缓存key:JZ_CACHE:SERVE_RECORD::1693815623867506689

缓存value:serve表的记录

缓存过期时间:-1,表示永不过期

仔细核实内容是否符合我们的预期结果。

在@Cacheable注解中有一个属性为cacheManager,表示缓存管理器,通过缓存管理器可以设置缓存过期时间。

标签:缓存,Spring,Cache,查询,key,import,注解
From: https://www.cnblogs.com/freps/p/18516595

相关文章

  • 基于SpringBoot + Vue的在线项目管理与任务分配中的应用
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 基于SpringBoot + Vue的高性能集群共享平台(角色:用户、教师、管理员)
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 基于SpringBoot + Vue的语言的医疗设备管理系统
    具体实现截图系统测试从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的,通过功能测试寻找出系统缺陷并改正,确保系统没有缺陷。在测试过程中证明系统满足客户需求,发现问题和不足及时改正。测试完成之后得出测试结论。系统测试目的在酒店管理系统的开发......
  • 基于SpringBoot + Vue的健身房管理系统(角色:用户、健身教练、管理员)
    具体实现截图系统测试从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的,通过功能测试寻找出系统缺陷并改正,确保系统没有缺陷。在测试过程中证明系统满足客户需求,发现问题和不足及时改正。测试完成之后得出测试结论。系统测试目的在酒店管理系......
  • 基于SpringBoot + Vue的口腔诊所系统
    具体实现截图系统测试从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的,通过功能测试寻找出系统缺陷并改正,确保系统没有缺陷。在测试过程中证明系统满足客户需求,发现问题和不足及时改正。测试完成之后得出测试结论。系统测试目的在酒店管理系......
  • 基于springboot小区物联网平台源码
    小区物联网平台是一个专为小区硬件管理设计的物联网管理平台,其核心功能在于与各大厂商的门禁设备、道闸设备、监控设备、智能锁以及充电桩等进行高效对接。该平台支持HTTP、MQTT、ComNet等多种协议,以便轻松实现与各大小区云平台的互联互通。目前,该平台已成功对接了包括月轮......
  • 基于SpringBoot的项目工时统计成本核算管理源码带教程
    该系统是基于若依前后端分离的架构,前端使用vue2,后端使用SpringBoot2。技术框架:SpringBoot2.0.0+Mybatis1.3.2+Shiro+swagger-ui+jpa+lombok+Vue2+Mysql5.7运行环境:jdk8+IntelliJIDEA+maven+宝塔面板系统与功能介绍这是一款轻量级工时记录和管理工......
  • java计算机毕业设计基于SpringBoot的疫苗接种管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,疫苗接种成为预防和控制传染病的重要手段。传统的疫苗接种管理依赖于手工记录和纸质文件,这种方式不仅效率低下,而且容易出......
  • java计算机毕业设计基于springboot的个人博客设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容基于SpringBoot的个人博客设计与实现的相关说明一、研究背景随着互联网的迅猛发展,个人博客作为一种便捷的网络表达和信息分享方式,受到了广泛的关注和应用。......
  • Spring Boot 20道面试题
    +目录1.什么是SpringBoot?2.SpringBoot的主要优点是什么?3.SpringBoot的核心注解是哪个?它有什么作用?4.SpringBoot如何加载外部配置文件?5.SpringBoot如何实现跨域请求?6.SpringBoot的热部署是如何实现的?7.SpringBoot如何配置多数据源?8.SpringBoot中如何实现AOP?9.Spr......