SpringBoot中通过住注解方式使用Redis

2023-11-09

1. SpringBoot中Redis缓存注解的使用

首先在启动类上添加@enableCache注解,表示开始注解缓存功能

特别注意:Spring框架中所有的注解都是通过AOP的原理实现的,即Spring框架为我们创建代理对象,代理对象去实现注解的功能。所以当一个支持缓存的方法,在对象内部被调用的时候,是不会触发缓存功能的,因为当前类方法调用当前类方法使用的是this.调用,也就是当前对象,而不是代理对象,增强没有上生效。

@Cacheable、@Cacheput、@CacheEvict是spring3.1版本以后对缓存支持的注解。这些注解作用在方法上。使用了Spring AOP的思想。@Cacheable、@Cacheput、@CacheEvict这些注解不是专门针对Redis的,而是针对本地缓存的。但是在SpringBoot框架中,可以使用这些注解配合Redis进行使用。

1.1 @Cacheable

使用存在查询的方法上

此注解标记可以使用在一个方法上也可以使用在一个类上。标记在方法上表示该方法是支持缓存的,标记在类上表示该类中所有的方法都是支持缓存的。

该注解的作用原理:首先在执行查询方法之前,会先查询缓存,如果在缓存中查询到想要的数据就会直接返回,不会再执行此方法;如果在缓存中没有查到就会查询数据库,并且将查询结果作为该方法的返回值返回。Spring Cache会将该方法的返回值缓存起来。保证下次利用同样的参数执行该方法的时候,直接从缓存中获取结果,而不需要执行此方法。

在缓存方法的返回值的时候,是以键值对的形式存储到缓存中。值就是该方法的返回结果。键需要自己指定,spring中支持两种生成key的策略。EL表达式和自定义。在EL表达式中详细说明。

@Cacheable注解中可以定义三个属性@Cacheable(value="",key="",condition="",unless="")

value:

指定缓存的名称,该属性必须指定。表示当前方法的返回值会被存储到哪个缓存上。也可以指定多个。

key:

指定缓存结果对应的key。支持SpEL表达式的方式赋值。可以不指定,不指定的时候使用默认值,默认值就是将方法的所有参数进行组合,作为key。Spring还提供了root对象来生成key,通过root对象可以获取到一下信息:

 

 

 

condition:

表示缓存条件,不设置的时候,缓存所有的返回结果。设置的时候,通过SpEL表达式指定,只有当表达式为true的时候,缓存才会被触发,将返回结果缓存。

 @Cacheable(cacheNames = "sum", key = "#root.args[0]", condition = "#id!=null", unless = "#result==null")
    public Map<String, ResData> selectSum(Long id) {
        //查询,并将结果返回
        return sumDao.querySum(id);
    }

 

 unless 

除...之外。也表示缓存条件,不设置的时候,缓存所有的返回结果。设置的时候,通过SpEL表达式指定,只有当表达式为false的时候,缓存才会被触发,将返回结果缓存。

 @Cacheable(cacheNames = "sum", key = "#root.args[0]", condition = "#id!=null", unless = "#result==null")
    public Map<String, ResData> selectSum(Long id) {
        //查询,并将结果返回
        return sumDao.querySum(id);
    }

注意:condition和unless的区别,condition用方法的参数作为判断条件,也就是说根据犯法的参数判断是否信息存放到缓存中。而unless是将方法的返回值作为判断条件,也就是说根据方法的返回值判断,是否将信息存放到缓存中。

1.2 @Cacheput

使用在添加和修改的方法上

后置增强

@Cacheput标注的方法在执行之前不会去查询缓存,每次都会执行该方法,在该方法执行完后,将该方法的返回值以键值对的形式保存到缓存中。

其属性和@Cacheable属性一样。

value属性,必须指定。

1.3 @CacheEvict

用在清除缓存到方法上。

可以标记在类上,也可以标记在方法上,标记在雷伤的时候表示该类中所有的方法执行都会触发清除缓存的操作

该注解可以定义的属性有:value、key、condition、allEntries和beforeInvocation。

value:

指定缓存的名称

key:

指定要清除的缓存的key。不指定将会使用默认生成策略生成的key,默认生成策略就是将方法中所有参数拼接为key

condition:

指定触发清除缓存操作的条件。

allEntries:

该属性是一个boolean类型的,表示是否清除缓存中的所有的数据。默认的是false,当指定为true的时候,将会忽略指定的key。会清除缓存中所有的数据。

beforeInvocation:

清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,Spring会在调用该方法之前清除缓存中的指定元素。

扩展:Ehcache中的清除缓存策略

eternal====缓存中对象是否永久有效,即是否永驻内存,true时将忽略timeToIdleSeconds和timeToLiveSeconds

timeToIdleSeconds==缓存数据在失效前的允许闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,此为可选属性,即访问这个cache中元素的最大间隔时间,若超过这个时间没有访问此Cache中的某个元素,那么此元素将被从Cache中清除

timeToLiveSeconds====缓存数据在失效前的允许存活时间(单位:秒),仅当eternal=false时使用,默认值是0表示可存活时间无穷大,即从创建开始计时,当超过这个时间时,此元素将从Cache中清除

1.4 @CacheConfig

标记在类上。有时候一个类中可能会有多个缓存操作,而这些缓存使用的可能是同一个缓存,这个时候就可以使用@CacheConfig来配置缓存的名称。

1.5 @EnableCaching

springboot启动器上添加此注解,表示开启注解缓存功能,否则注解不生效。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot中通过住注解方式使用Redis 的相关文章

  • Windows 下 sublime text3的安装及设置

    一 安装Sublime Text3 1 下载 官网下载 http www sublimetext com 3 百度云 https pan baidu com s 1X6hD7AH giyahkCK79ZKqw 提取码 e3ai 2 安装 S
  • android recovery 升级和分区

    1 华为手机分区信息 1 shell android df df Filesystem Size Used Free Blksize dev 196M 64K 196M 4096 mnt asec 196M 0K 196M 4096 mnt
  • DBCP连接池配置参数说明

  • 【注意】C++基类的构造函数中,参数与类中已有变量同名,要加上作用域来表示类内变量

    定义一个类 class Text1 public Text1 构造函数 Text1 int pub int pri int pro 重载的构造函数 Text1 int pub void OutputValue 打印类内变量 private
  • java实现一台电脑控制多台手机_涨姿势:教你用电脑远程控制多台手机!终于可以挂手机了!...

    是不是每次坐到电脑前 你的桌面上总会摆好手机 时不时低头瞅瞅 不管是看视频 资讯都会时不时摆弄两下手机 如果你是上班族 是不是因为这个被领导骂过或者斜眼过 好吧 难道你不感觉这样很烦么 小编今天就介绍一个方法让你能用电脑挂手机 关键是过程超
  • iOS死灰复燃SDK

    iOS死灰复燃SDK功能 令iOS APP进入后台或手机锁屏下常也能常驻后台活动 定位 即使杀死APP进程也会适时自动复活APP 让APP能够在后台或进程被杀死之后也能照常发送网络请求 定位 更新数据等操作 具备自动复活功能 SDK版本 V
  • 华为OD机试真题- 找数字【2023Q2】【JAVA、Python、C++】

    题目描述 给一个二维数组nums 对于每一个元素num i 找出距离最近的且值相等的元素 输出横纵坐标差值的绝对值之和 如果没有等值元素 则输出 1 例如 输入数组nums为 0 3 5 4 2 2 5 7 8 3 2 5 4 2 4 对于
  • 2023待学习&待填的坑

    代码cherry pick时解决代码冲突 一 gdb调试 二 git教程实践部分 done 20230805 学习笔记链接 git相关 张杰萌萌哒的博客 CSDN博客 三 编译原理及makefile编写 四 C 课程 60 学习笔记链接 C
  • TOB企业如何借助生态力,实现可持续增长

    近年来 随着经济社会的高速发展 数字化转型已成为企业高质量发展 必答题 企业开始通过购买产品 解决方案或者自研的方式来进行本企业的数字化建设 但是由于内部部门墙或者是系统之间的隔阂 难以做到以整个公司为视角的全面数字化建设 就容易在企业内部
  • 分布式ID生成方案

    分布式ID生成方案 在业务系统中很多场景下需要生成不重复的 ID 比如订单编号 支付流水单号 优惠券编号等都需要使用到 在我们业务数据量不大的时候 单库单表完全可以支撑现有业务 数据再大一点搞个MySQL主从同步读写分离也能对付 但随着数据
  • JAVA环境变量path配置及其作用

    1 环境变量的作用是为了在dos的任意目录 可以去使用Java和javac 命令 2 先配置JAVA HOME 指向jdk安装的主目录 3 编辑path环境变量 增加 JAVA HOME bin 其中 代表引用 这样写的好处就是将来的jdk
  • springboot WxJava 收发企业微信 应用消息

    在Spring Boot中 同样可以使用WxJava来实现企业微信应用消息的收发功能 WxJava是一款基于微信公众号 小程序 企业号的Java SDK 提供了丰富的功能 包括消息收发 菜单管理 用户管理等 以下是简单的WxJava实现企业
  • HTML加js实现计算文件哈希值,前端使用js计算文件的MD5值

    在前端开发时有时需要计算文件的 MD5 值传给后端用作比较文件的准确性和完整性 还应用到了现代浏览器中都实现了的类 FileReader 它的实例的 readAsBinaryString 方法 用来读取文件的原始二进制数据 创建HTML部分
  • eclipse的下载及安装

    目录 1 eclipse的下载 2 2 eclipse的安装 4 1 eclipse的下载 eclipse官网地址 https www eclipse org 进入eclipse官网选择Download 选择Download Package
  • 300. 最长上升子序列

    300 最长上升子序列 给定一个无序的整数数组 找到其中最长上升子序列的长度 示例 输入 10 9 2 5 3 7 101 18 输出 4 解释 最长的上升子序列是 2 3 7 101 它的长度是 4 package com wangyg
  • 为什么LTE PA用GaAs工艺而GSM PA用CMOS工艺?

    为什么LTE PA用GaAs工艺而GSM PA用CMOS工艺 2017 09 14 00 00 小编参加了Qorvo公司发布会 会上了解到Qorvo的主要产品包括GaAS和CMOS 的PA 会后小编提问到这两种PA的区别以及CMOS PA在
  • 对象池(连接池):commons-pool2源码解析:GenericObjectPool的borrowObject方法

    为什么会有对象池 在实际的应用工程当中 存在一些被频繁使用的 创建或者销毁比较耗时 持有的资源也比较昂贵的一些对象 比如 数据库连接对象 线程对象 所以如果能够通过一种方式 把这类对象统一管理 让这类对象可以被循环利用的话 就可以减少很多系
  • 均值已知检验方差_SAS读书笔记:方差分析

    方差分析 Analysis of Variance ANOVA 就是用于检验两组或两组以上的均值是否具有显著性差异的数理统计方法 有单因素方差分析和多因素方差分析 1 基本原理 在方差分析中 把要分析的变量称为响应变量 对响应变量取值有影响
  • LSTM理解与应用

    首先感谢https www jianshu com p 9dc9f41f0b29作者的文章 让我对LSTM有了初步的认识 还有我要推荐李宏毅老师讲的LSTM课程 讲的实在是太容易理解了 https www youtube com watch
  • 插值查找(两种方法)

    一 什么是插值查找 1 插值查找算法类似于二分查找 不同的是插值查找每次从自适应 mid 处开始查找 2 二分查找中mid值是left和right所指序列下标的和的1 2即 mid left right 2 3 而插值查找的mid 值是通过

随机推荐

  • Unity3D-Blur-实现屏幕特效十字耀斑

    原文链接 http gad qq com article detail 7181189
  • springboot面试题

    一 SpringBoot 和spring springMVC的区别 Spring它的主要特征是依赖注入 它有两大核心主要是IOC和AOP IOC 应用程序对象的创建 配置 维护 依赖交给了SpringIOC容器统一进行管理 从而实现松耦合
  • OpenCV入门教程,超详细OpenCV入门教程!10小时让你轻松掌握opencv的使用

    OpenCV是一个基于BSD许可 开源 发行的跨平台计算机视觉和机器学习软件库 可以运行在Linux Windows Android和mac OS 操作系统上 它轻量级而且高效 由一系列 C 函数和少量 C 类构成 同时提供了Python
  • 激活函数的作用

    什么是人工神经网络 现在 我相信我们大家都很熟悉什么是A NN了 但接下来请允许我按照自己的理解给A NN下个定义 它是一个强健有力的 同时也非常复杂的机器学习技术 它可以模仿人类的大脑 继而模仿大脑的运作 正如我们的人脑一样 在一个层次上
  • linux(Ubuntu) 下安装sqlite3

    1 介绍 sqlite3是linux上的小巧的数据库 一个文件就是一个数据库 2 安装 要安装sqlite3 可以在终端提示符后运行下列命令 sudo apt get install sqlite3 检查版本 sqlite3 version
  • ant design vue(vue3)的a-tree组件点击文字实现菜单展示

    最近的写的一个项目 需要用的a tree 甲方就觉得那个小三角不好点 需要点文字也可以展开 就需要小小的改动一哈 效果图 过程 实现起来还是很简单的 1 我们可以看ant的官方文档 发现有一个事件expand是当我们展开 收起时就会触发 e
  • vue:loading动画

    1 更改入口文件main js import Vue from vue import App from App vue import router from router import store from store import as
  • Vue -- Mixins 详解

    最近在做页脚版权年份的自动更新 但项目里有多个地方都需要改动 了解到 Vue 里有 mixin 这个概念 发现可以很方便地抽取出来 进行组件化统一管理 下面介绍一下 mixin 的概念 特点和应用场景 介绍 官方解释 混入 mixin 提供
  • 使用 Vue 3.0 和 Element UI 实现功能增加、按钮操作和查询框功能详解

    简介 Vue 3 0 和 Element UI 是当今流行的前端开发工具 结合它们可以轻松构建出强大的用户界面 本篇技术博客将详细介绍如何利用 Vue 3 0 和 Element UI 实现功能增加 按钮操作以及通过查询框输入信息来进行信息
  • JS 数组对象去重

    原数据 let arr goodsId 1 quota 12 skuId 1 goodsId 2 quota 12 skuId 2 goodsId 1 quota 12 skuId 1 去重后数据 let arr goodsId 1 quo
  • ubuntu系统整体克隆时遇到system back无法识别固态硬盘

    ubuntu系统整体克隆 使用System back软件 安装相关软件 1 安装System back 2安装 GParted 制作系统盘 1 启动system back软件 2制作镜像 系统恢复 1选择U盘启动 2系统分区 在配置环境的时
  • C语言字符串逆转

    define CRT SECURE NO WARNINGS include
  • shell编程一百例 day-1

    shell编程一百例 今晚份 能力有限 未按顺序 未完待续 1 输出 Hello World 2 猜数游戏 3 键盘输入三个数 升序输出
  • 麒麟系统调试

    一 raid 报错 mdadm RUN ARRAY failed Invalid argument 原因 zcat proc config gz 查看配置 驱动未加载全 解决办法 modprobe dm raid modprobe raid
  • 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]...

    前几天CSDN论坛的首页 看到一则帖子 题目是 一道经典的C 题 关于分钱的问题 适合新手阅读 黑客X档案论坛题目 链接如下 http blog csdn net gisfarmer archive 2009 02 08 3869236 a
  • 手术导航系统原理简介、主要工作及应用

    目录 1 手术导航系统简介 2 手术导航系统的工作原理及构造 3 手术导航系统通常需完成四项主要工作
  • 在Windows10环境安装CUDA11.7及PyTorch1.13--使用Nvidia RTX A4000开始炼丹之旅

    在Windows10环境安装CUDA11 7及PyTorch1 13 使用Nvidia RTX A4000开始炼丹之旅 前言 这个双十一 RTX3090矿卡反倒是涨价了 RTX3090Ti当然也涨价了 只好从x宝搞一只工包丽台RTX A40
  • QScintilla应用(1) 安装及简介

    相关网址 下载地址 在线文档 1 下载并解压 将下载的压缩包解压之后 得到以下目录结构 目录结构含义如下 目录名 用途 Qt4Qt5 编译文件夹 生成对应的DLL文件 designer Qt4Qt5 相关的设计师插件的编译文件夹 examp
  • C++ DLUT 上机作业(一)

    文章目录 C DLUT 上机作业 一 1 定义一个分数类如下 要求实现分数的初始化与设置 四则运算及约分以及输出等功能 并在主函数中测试 2 定义并测试日期类 Date 类包括私有数据成员 year month day 公有成员函数实现以下
  • SpringBoot中通过住注解方式使用Redis

    1 SpringBoot中Redis缓存注解的使用 首先在启动类上添加 enableCache注解 表示开始注解缓存功能 特别注意 Spring框架中所有的注解都是通过AOP的原理实现的 即Spring框架为我们创建代理对象 代理对象去实现