简介

​ 当我们需要展示数据的时候,后台会根据需要从服务器中获取数据,但是频繁的请求数据库会对服务造成压力,于是我们引入了缓存这个概念。

​ 当我们引入缓存后,在调用一个缓存方法时,会根据相关信息和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回,从而避免频繁访问数据库的情况。

基本注解

注解 解释
@EnableCaching 开启基于注解的缓存
@CacheConfig 统一配置本类的缓存注解的属性
@Cacheable 第一次调用方法后都将返回值存入缓存,下次则请求直接调用缓存
@CachePut 每次调用方法后都将返回值存入缓存,用于缓存更新
@CacheEvict 清除缓存
@Caching 组合注解,即给一个方法同时设置多个缓存方案

@Cacheable/@CachePut/@CacheEvict 主要的参数

属性 解释
value/cacheNames 缓存区域的名称,必须指定至少一个
例如:
@Cacheable(value=”mycache”) 或者
@Cacheable(value={”cache1”,”cache2”}
key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,
如果不指定,则缺省按照方法的所有参数进行组合
例如:@Cacheable(key=”#id”)
condition 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,
只有为 true 才进行缓存/清除缓存
例如:@Cacheable(condition=”#user != null”)
unless 当条件结果为TRUE时,就不会缓存。
例如@Cacheable(unless=”#user == null”)
allEntries
(@CacheEvict )
是否清空对应缓存区域所有缓存内容,默认为 false
beforeInvocation
(@CacheEvict)
是否在方法执行前就清空缓存,默认为 false,即如果方法没有执行完,或者抛出异常就不会清空缓存

使用

添加依赖

在springboot的pom文件添加如下依赖

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

启用注解

在启动类里添加@EnableCaching注解开启缓存

@EnableCaching//开启缓存
@MapperScan(basePackages = "com.huang.mapper")
@SpringBootApplication
public class SpringbootCacheApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootCacheApplication.class, args);
} }
注意:默认提供的缓存实现方式是map集合

使用缓存

1 在要缓存结果的方法上添加@Cacheabl注解

/*
* @Cacheabl
* 开启缓存,将方法结果存入缓存,再次请求同样的数据时直接从缓存中调用,不再调用方法
* 属性:
* value/cacheName:指定缓存名字
* key:指定缓存数据的键值对的key,默认为方法参数中的值
* 也可用sqEl表达式
* Condition:指定缓存执行的条件
* unliss:指定缓存不执行的条件
* sync:指定缓存是否使用异步模式,默认同步,若异步则不支持unless
* */
@Override
@Cacheable(cacheNames = "dept",key = "targetClass")
public List<Dept> findAll() {
System.out.println("全查!");
return mapper.selectAll();
}

2 在要更新缓存的方法上添加@CachePut注解

/*
* @CachePut
* 调用方法后,再把返回值放入缓存
* 属性与cacheable基本相同
* 由于总是执行方法后才操作缓存,在key等属性可以调用#result返回值
* 设置key与@cachable相同可以重写缓存里的数据
* */
@Override
@CachePut(cacheNames = "dept",key = "#root.targetClass")
public List<Dept> add(Dept dept) {
System.out.println("增加!");
mapper.insert(dept);
return mapper.selectAll();
}

3 在要更新缓存的方法上添加@CachePut注解

/*
* @CacheEvict
* 清除缓存中的数据
* beforeInvocation
* 默认值为false,即默认清除缓存在方法后执行,若出现异常则缓存不清除。为true则相反
* */
@CacheEvict(cacheNames = "dept",key = "#root.targetClass",beforeInvocation = false)
@Override
public void delete(Integer deptno) {
System.out.println("删除!");
mapper.deleteByPrimaryKey(deptno);
}

4 在有复杂缓存策略的方法上添加@Caching注解

/*
* @caching
* 组合注解,三种注解以每种可有多个,以数组形式存储
* */
@Caching(
cacheable = {
//添加一个缓存
@Cacheable(value = "dept",key = "#deptno")
},
put = {
//更新一个缓存
@CachePut(value = "emp",key = "#root.targetClass")
},
evict = {
//清除一个缓存
@CacheEvict(value = "person",key = "#deptno")
}
)
@Override
public Dept findById(Integer deptno) {
return null;
}

5 当一个类里多个方法的缓存有重复配置,可以在类上使用@CacheConfig注解

//使用@CacheConfig统一cacheName,如果在方法上仍写了value,则该方法值仍以value为准
@CacheConfig(cacheNames = "dept")
@Service
public class DeptServiceImp implements DeptService { @Resource
private DeptMapper mapper; @Override
@Cacheable(key = "targetClass")
public List<Dept> findAll() {
System.out.println("全查!");
return mapper.selectAll();
} @Override
@CachePut(key = "targetClass")
public List<Dept> add(Dept dept) {
System.out.println("增加!");
mapper.insert(dept);
return mapper.selectAll();
} @CachePut(key = "targetClass")
@Override
public List<Dept> delete(Integer deptno) {
System.out.println("删除!");
mapper.deleteByPrimaryKey(deptno);
return mapper.selectAll();
} }

使用Springboot Cache做简单缓存的更多相关文章

  1. 完整SpringBoot Cache整合redis缓存(二)

    缓存注解概念 名称 解释 Cache 缓存接口,定义缓存操作.实现有:RedisCache.EhCacheCache.ConcurrentMapCache等 CacheManager 缓存管理器,管理 ...

  2. 基于LRU Cache的简单缓存

    package com.test.testCache; import java.util.Map; import org.json.JSONArray; import org.json.JSONExc ...

  3. [Java 缓存] Java Cache之 Guava Cache的简单应用.

    前言 今天第一次使用MarkDown的形式发博客. 准备记录一下自己对Guava Cache的认识及项目中的实际使用经验. 一: 什么是Guava Guava工程包含了若干被Google的 Java项 ...

  4. SpringBoot 下 mybatis 的缓存

    背景: 说起 mybatis,作为 Java 程序员应该是无人不知,它是常用的数据库访问框架.与 Spring 和 Struts 组成了 Java Web 开发的三剑客--- SSM.当然随着 Spr ...

  5. Spring Boot使用redis做数据缓存

    1 添加redis支持 在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> & ...

  6. SpringBoot 使用 EhCache2.x 缓存(三十一)

    SpringBoot 使用 EhCache2.x 缓存入门很简单,废话少说上干货: 1.在POM.xml中增加jar包 <!--开启 cache 缓存--> <dependency& ...

  7. SpringBoot实战(十三)之缓存

    什么是缓存? 引用下百度百科的解释: 缓存就是数据交换的缓冲区(又称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,找到了则直接执行,找不到的话则从内存中查找.由于缓存的运行速度 ...

  8. GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速

    摘要:华为云数据库高级内核技术专家详解GaussDB(for MySQL)Partial Result Cache特性,如何通过缓存中间结果对算子进行加速? 本文分享自华为云社区<GaussDB ...

  9. [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

    [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...

随机推荐

  1. Python基础总结之第五天开始【认识简单的条件语句,也可以叫判断语句】(新手可相互督促)

    周五更新很累... 坚持,年薪20万又进了一步~~ python中的条件语句以[ if ]开头,条件语句成立时,运行该代码块,如果条件不成立,则跳过该代码块,执行后面的代码块. 简单的小示例: 输入性 ...

  2. Java生鲜电商平台-统一异常处理及架构实战

    Java生鲜电商平台-统一异常处理及架构实战 补充说明:本文讲得比较细,所以篇幅较长. 请认真读完,希望读完后能对统一异常处理有一个清晰的认识. 背景 软件开发过程中,不可避免的是需要处理各种异常,就 ...

  3. .net持续集成sonarqube篇之 sonarqube触发webhook

    系列目录 WebHook近些年来变得越来越流行,github,gitlab等代码托管平台都提供webhook功能.关于webhook这里不做详细介绍,大家可以参阅读相关互联网书籍或者材料来更深了解.可 ...

  4. 归并排序(从上到下、从下到上)——C语言

    归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归 ...

  5. java在src/test/resourse下读取properties文件

    package com.jiepu; import java.io.File; import java.net.URISyntaxException; import java.util.Map; im ...

  6. EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

    目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...

  7. Kubernetes Pod 驱逐详解

    原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...

  8. Netty学习(四)-TCP粘包和拆包

    我们都知道TCP是基于字节流的传输协议.那么数据在通信层传播其实就像河水一样并没有明显的分界线,而数据具体表示什么意思什么地方有句号什么地方有分号这个对于TCP底层来说并不清楚.应用层向TCP层发送用 ...

  9. bio,nio,aio学习

    http://qindongliang.iteye.com/blog/2018539 1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的 ...

  10. 守望先锋app(1)

    这个app就是从守望先锋的官网下载相关的图片.文字.视频然后展示出来. 第一个功能是英雄介绍,所以先分析一波官网的数据.守望先锋的英雄数据的官方网站是http://ow.blizzard.cn/her ...