使用SpringCache缓存数据

今天学到一个新知识:SpringCache,刚开始项目是使用Redis来进行缓存数据,但是当进行数据库操作的时候,通常也需要对Redis缓存的数据进行操作,这就需要写很多的代码量。

然后就了解到了SpringCache,可以通过注解来把数据添加到缓存或者删除缓存中的数据。

SpringCache的使用

  1. springboot项目需要导入web依赖
        <!--springboot项目进行web开发必不可少的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>compile</scope></dependency>
  1. 在启动类中使用@EnableCaching注解开启缓存
package com.itheima;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@Slf4j
@SpringBootApplication
@EnableCaching
public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info("项目启动成功...");}
}
  1. 使用注解进行业务开发
package com.itheima.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.entity.User;
import com.itheima.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Autowiredprivate CacheManager cacheManager;@Autowiredprivate UserService userService;/*** CachePut:将方法返回值放入缓存* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key* @param user* @return*/@CachePut(value = "userCache",key = "#user.id")@PostMappingpublic User save(User user){userService.save(user);return user;}/*** CacheEvict:清理指定的缓存* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@CacheEvict(value = "userCache",key = "#id")
//    @CacheEvict(value = "userCache",key = "#p0")    //第一个参数
//    @CacheEvict(value = "userCache",key = "#root.args[0]")  //第一个参数@DeleteMapping("/{id}")public void delete(@PathVariable Long id){userService.removeById(id);}/**** @param user* @return*/@CacheEvict(value = "userCache",key = "#user.id")
//    @CacheEvict(value = "userCache",key = "#p0.id")   //获取user中的id
//    @CacheEvict(value = "userCache",key = "#root.args[0].id")  //获取user中的id
//    @CacheEvict(value = "userCache",key = "#result.id")  //获取user中的id@PutMappingpublic User update(User user){userService.updateById(user);return user;}/*** Cacheable:先看缓存中有没有数据,如果有就不再执行sql* condition:条件,满足指定条件时才缓存数据* unless:满足条件则不缓存* @param id* @return*/
//    @Cacheable(value = "userCache",key = "#id",condition = "#result != null ")@Cacheable(value = "userCache",key = "#id",unless = "#result == null ")@GetMapping("/{id}")public User getById(@PathVariable Long id){User user = userService.getById(id);return user;}/*** Cacheable* @param user* @return*/@Cacheable(value = "userCache",key = "#user.id + #user.name")@GetMapping("/list")public List<User> list(User user){LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(user.getId() != null,User::getId,user.getId());queryWrapper.eq(user.getName() != null,User::getName,user.getName());List<User> list = userService.list(queryWrapper);return list;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/577038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5g消息-5G时代短信升级-富媒体智能交互-互联网新入口

在5G时代&#xff0c;运营商和各大手机厂商都在积极推进5G消息的商用&#xff0c;基于短信入口的富媒体消息应用在近两年得到快速发展&#xff0c;并在企业端形成了广泛应用。 作为5G时代的数字原生应用&#xff0c;5G消息支持用户通过文字、图片、音频、视频、位置等富媒体方式…

【算法题】链表重排(js)

力扣链接&#xff1a;https://leetcode.cn/problems/LGjMqU/description/ /*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode…

异常的分析

Throwable: 总父类,表示不正常的情况 2. Error: 错误 无法解决也无法提前避免的问题通常由硬件设备或内存等问题导致 Exception:异常 可以解决或提前避免的问题通常由代码导致分类: RuntimeException:运行时异常&#xff0c;也称为未检查异常、未检异常等 编译不报错,运行报错…

C++11(上):新特性讲解

C11新特性讲解 前言1.列表初始化1.1{ }初始化1.2std::initializer_list 2.类型推导2.1 auto2.2 typeid2.3 decltype 3.范围for4.STL的变化4.1新容器4.2容器的新方法 5.右值引用和移动语义5.1 左值引用和右值引用5.2 左值引用与右值引用比较5.3 右值引用的使用场景5.4 右值、左值…

浙江大唐乌沙山电厂选择ZStack Cloud打造新一代云基础设施

浙江大唐乌沙山电厂选择云轴科技ZStack Cloud云平台为其提供高性能、高可用的云主机、云存储和云网络&#xff0c;构建了简单、稳定、安全、高效的云基础设施&#xff1b;通过ZStackCloud为其提供可视化服务编排、多租户自服务等模块&#xff0c;帮助电厂提高IT资源利用率&…

解决FTP传输慢的问题(ftp传输慢为什么)

在企业运营中&#xff0c;使用FTP进行文件或数据传输是相当普遍的做法。尽管FTP是一种传统的文件传输工具&#xff0c;但在实际应用中&#xff0c;我们可能会面临传输速度缓慢的问题&#xff0c;这不仅影响工作效率&#xff0c;还浪费时间。为了解决这一问题&#xff0c;我们可…

泛微OA xmlrpcServlet接口任意文件读取漏洞(CNVD-2022-43245)

CNVD-2022-43245 泛微e-cology XmlRpcServlet接口处存在任意文件读取漏洞&#xff0c;攻击者可利用漏洞获取敏感信息。 1.漏洞级别 中危 2.影响范围 e-office < 9.5 202201133.漏洞搜索 fofa 搜索 app"泛微-OA&#xff08;e-cology&#xff09;"4.漏洞复现 …

vue 项目/备案网页/ip网页打包成 apk 安装到平板/手机(含vue项目跨域代理打包成apk后无法访问接口的解决方案)

下载安装HBuilder X编辑器 https://www.dcloud.io/hbuilderx.html 新建 5APP 项目 打开 HBuilder X&#xff0c;新建项目 此处项目名以 ‘test’ 为例 含跨域代理的vue项目改造 若 vue 项目中含跨域代理&#xff0c;如 vue.config.js module.exports {publicPath: "./&…

Python 查杀进程的方法封装

一、前置说明 在自动化测试中,经常需要启动进程和关闭进程,本文介绍几种常用的查杀进程的方式:kill_process_by_pid、kill_process_by_port、kill_process_by_name、kill_process_by_window_name。 二、代码实现 utils/os_util.py import os import platform import log…

【C++】开源:FTXUI终端界面库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍FTXUI终端界面库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…

【文本处理】正则表达式

一、简介 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&…

单例模式学习

单例模式是应用最广的设计模式之一&#xff0c;也是程序员最熟悉的一个设计模式&#xff0c;使用单例模式的类必须保证只能有创建一个对象。 一、为什么要使用单例&#xff1f; 在开发过程中&#xff0c;很多时候一个类我们希望它只创建一个对象&#xff0c;比如&#xff1a;线…

springboot(ssm智慧校园之家长子系统 智慧校园系统Java系统

springboot(ssm0智慧校园之家长子系统 智慧校园系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09…

苹果发布了一个Ferret(雪貂)多模态大模型,在一个无人问津的角落被一位博主捞起来

苹果12月14日释放了一个名为Ferret的多模态大语言模型&#xff0c;有的翻译是雪貂&#xff0c;有的是法学硕士&#xff0c;要我说&#xff0c;还是叫雪貂吧&#xff0c;接地气亲民&#xff0c;将来犯蠢的时候出来发张雪貂的可爱表情包作公关就完事了&#xff0c;你个法学硕士到…

C语言—每日选择题—Day63

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 设C语言中&#xff0c;一个int型数据在内存中占2个字节&#xff0c;则unsigned int型数据的取值范围为 A&#xff1a;0~255 B&#xff1a;0…

mysql8.x版本_select语句源码跟踪

总结 源码基于8.0.34版本分析&#xff0c;函数执行流程含义大致如下&#xff1a; do_command 方法从连接中读取命令并执行&#xff0c;调用 dispatch_command 对命令进行分发。dispatch_command 调用 mysql_parse 对命令进行解析&#xff0c;如果遇到一条语句用 ; 分隔多条命…

CGAL中三角形曲面网格近似

1、介绍 此软件包实现了变分形状近似&#xff08;VSA&#xff09;方法&#xff0c;通过更简单的表面三角形网格来近似输入表面网格。该算法的输入必须是&#xff1a; 三角形分割&#xff1b;组合2流形 输出是一个三角形汤&#xff0c;可以构建成多边形曲面网格。 给定一个输入曲…

linux操作系统——进程(二) 进程状态

进程状态 你真正的理解了进程的状态嘛?特别是操作系统教材中学过的进程状态&#xff0c;你真的理解了吗&#xff1f; 教材上关于进程状态的说明 下面我们以下图为例: 这是教材上对操作系统的说明&#xff0c;但是它并没有详细的说明&#xff0c;这些状态具体是什么&#xf…

大语言模型说明书

在浩瀚的信息宇宙中&#xff0c;大语言模型如同一颗璀璨的星星正在熠熠生辉。21世纪以来&#xff0c;人工智能可谓是飞速发展&#xff0c;从简单的神经网络到大语言模型、生成式AI&#xff0c;这并非仅仅是一种技术的进步&#xff0c;更是人类智慧的飞跃。大语言模型不仅仅是语…

获取请求的真实ip

一、node代码 const app express(); app.get("/abc", (req, res) > {const forwardedForHeader req.get("X-Forwarded-For");const realIpHeader req.get("X-Real-IP");let realIp null;if (forwardedForHeader && forwardedFor…