1.缓存目的
缓存是用于提升系统的性能,加速系统的访问,降低成本的一种技术。可以将一些高频、热点信息放入缓存中,避免直接从数据库中查询,如商品的页面信息这种经常被访问的数据。
2.JSR-107 缓存规范
为了统一缓存的开发规范、提高系统的扩展性和最小化开发成本等,J2EE 发布了 JSR-107 缓存规范。
Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry和 Expiry。

CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。
CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。
Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。
Entry是一个存储在Cache中的key-value对。
Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。

3.Spring 缓存抽象
Spring从3.1开始定义了org.springframework.cache.Cache和 CacheManager 接口来统一不同的缓存技术并支持使用 JCache(JSR-107)注解简化我们开发。

Cache:缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等.
CacheManager:缓存管理器,管理各种缓存(Cache)组件

核心注解:
注解 说明
@Cacheable 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CacheEvict 主要针对方法配置,清空缓存
@CachePut 保证方法被调用,又希望结果被缓存。
@EnableCaching 在启动类上面加注解@EnableCaching,开启缓存
keyGenerator 缓存数据时key生成策略
serialize 缓存数据时value序列化策略

注解参数:
属性名 说明 举例
cacheNames/value 缓存的名称,在spring配置文件中定义,必须指定至少一个 @Cacheable(value=”mycache”)
@Cahceable(value{“cache1”,”chache2”})
key 缓存的key,可以不指定,缺省按照方法的所有参数进行组合,如果指定要按照SpEL表达式方法编写。 @Cacheable(value=”mycache”,key=”#userName”)
condition 缓存的条件,使用SpEl编写,返回true或者false,为true才进行缓存/清除缓存,缺省为true。 @Cahceable(value=”mycache”,condition=”#userName.lenght()>2”)
allEntries
(@CacheEvict) 是否清空所有缓存内容,缺省为false,如果指定为true,则方法调用后立即清空所有缓存 @CacheEvict(value=”mycache”,allEntries=true)
beforeInvocation
(@CacheEvict) 是否在方法执行前就清空,缺省为false,如果指定为true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存 @CacheEvict(value=”mycache”,allEntries=true,
beforeInvocation=true)
unless
(@CachePut
@Cacheable) 用于否决缓存的,该表达式只在方法执行之后判断,此时可以拿到返回值result进行判断,条件为true不会缓存,false才会缓存 @Cacheable(value=”mycache”,unless=”#result==null”)

缓存 SpEL 表达式
名字 位置 描述 示例
methodName root object 当前被调用的方法名 #root.methodName
method root object 当前被调用的方法 #root.method.name
target root object 当前被调用的目标对象 #root.target
targetClass root object 当前被调用的目标对象类 #root.targetClass
args root object 当前被调用的方法的参数列表 #root.args[0]
caches root object 当前方法调用使用的缓存列表(如@Cacheable(value={“cache1”, “cache2”})),则有两个 cache #root.caches[0].name
argument name evaluation context 方法参数的名字. 可以直接 #参数名 ,也可以使用 #p0 或#a0 的形式,0 代表参数的索引; #userName、#a0、 #p0
result evaluation context 方法执行后的返回值(仅当方法执行之后的判断有效,如‘unless’,’cache put’的表达式 ’cache evict’的表达式 beforeInvocation=false) #result

4.缓存使用
① 引入spring-boot-starter-cache模块
② @EnableCaching开启缓存
③ 使用缓存注解
4.1案例
前提:
环境准备:(spring boot + mysql+mybatis)
表:student
实体类:Student
持久层:dao
业务层:service
控制层:controller

1 添加cache依赖

org.springframework.boot
spring-boot-starter-cache

省略mysql,mybatis,web依赖
2 添加配置信息
#配置数据源(数据库)相关的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/one?characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

#打印SQL语句
logging.level.com.bw.dao=debug

3.创建表,实体,dao,service,controller
省略
4.启动类中开启缓存
@SpringBootApplication
@EnableCaching //开启缓存
public class BootRedisApplication {

public static void main(String[] args) {SpringApplication.run(BootRedisApplication.class, args);
}

}

5.service层方法中使用缓存注解

@Cacheable(cacheNames = “students”,key = “#id”)
public Student queryById(Integer id) {
return studentMapper.queryById(id);
}

@CacheEvict(cacheNames = “students”,key = “#id”)
public void deleteById(Integer id) {
studentMapper.deleteById(id);
}

@CachePut(cacheNames = "students",key = "#student.id")
public Student update(Student student) {studentMapper.update(student);return student;
}

6.测试
页面通过controller访问servie不同方法,观察控制台日志结果

5.整合redis实现缓存
① 引入spring-boot-starter-data-redis模块
② application.properties配置redis连接地址
③ 使用注解操作redis
④ 或RestTemplate操作redis
redisTemplate.opsForValue()

一、Spring Boot整合redies相关推荐

  1. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

  2. RabbitMQ使用及与spring boot整合

    1.MQ 消息队列(Message Queue,简称MQ)--应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...

  3. Spring Boot 教程(三): Spring Boot 整合Mybatis

    教程简介 本项目内容为Spring Boot教程样例.目的是通过学习本系列教程,读者可以从0到1掌握spring boot的知识,并且可以运用到项目中.如您觉得该项目对您有用,欢迎点击收藏和点赞按钮, ...

  4. 五、spring boot整合mybatis-plus

    spring boot整合mybatis-plus 简介 mybatis 增强工具包,简化 CRUD 操作. 文档 http://mp.baomidou.com http://mybatis.plus ...

  5. spring boot 整合mybatis 无法输出sql的问题

    使用spring boot整合mybatis,测试功能的时候,遇到到了sql问题,想要从日志上看哪里错了,但是怎么都无法输出执行的sql,我使用的是log4j2,百度了一下,很多博客都说,加上下面的日 ...

  6. Spring boot 整合 Mybatis 实现增删改查(MyEclipse版)

    1.首先搭建好一个Spring boot 程序,编写好启动类. 启动类代码如下: @SpringBootApplication public class Start {public static vo ...

  7. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  8. freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

    今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...

  9. springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA

    今日份主题 Spring Boot 整合 Spring Data JPA JPA(Java Persistence API)是用于对象持久化的 API,是Java EE 5.0 平台标准的 ORM 规 ...

  10. java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板

    点击"牧码小子"关注,和众多大牛一起成长! 关注后,后台回复 java ,领取松哥为你精心准备的技术干货! 虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在 ...

最新文章

  1. 统计学习方法|K近邻原理剖析及实现
  2. Command_Of_Windows1
  3. python用字典编写购物程序_Python编写购物小程序
  4. 计算机系统行业竞争水平,中国计算机等23行业国际竞争力超世界平均水平
  5. C++容器 bitset
  6. ubuntu 12.04解决Broadcom STA无线网卡驱动安装失败解决
  7. iTerm2 使用笔记
  8. 第02课:简单好用的中文分词利器 jieba 和 HanLP
  9. 排序算法(二)Sort with Swap(0,*)
  10. 面向对象之软件需求中的体系构造
  11. PHP做一个直角三角形,三角形角度(直角三角形懒人计算器)
  12. 读《有效管理的5大兵法》笔记摘录(一)核心价值观:求实、进取、创新、协同、分享
  13. bC技术绑定10讲②解读“bC双码关联”!
  14. Android报错installation failed with message invalid file E://.....
  15. iOS 9-iPhone6s-iPadmini4企业证书信任
  16. 飞桨 x Graphcore IPU适配方案深度解读与硬件介绍 | 洞见AI硬件
  17. xmind做会议记录的方法
  18. 使用Node+websocket实现简易1v1聊天室(前端+服务器)
  19. 关于Linux操作系统的处理机管理分析
  20. 【CSDN AI周刊】第14期 | 吴恩达离职百度 CNN之父清华演讲

热门文章

  1. messagedigest 图片加密_通过MessageDigest实现简单的MD5加密
  2. 福昕pdf阅读器 去广告版|福昕pdf阅读器Foxit reader 去广告电脑版下载v9.3
  3. 简要罗列通过Allegro绘制的PCB封装步骤
  4. Windows如何刷新DNS缓存
  5. linux桌面监控软件,Ubuntu安装Conky系统监控桌面插件
  6. 16QAM学习(二)multisim仿真 乘法器的实现,MC1496实现信号乘法混合
  7. android nfc的用法,Android下NFC的简单使用
  8. Revit二次开发——依据两条平曲线创建一条三维曲线
  9. media-微软Azure文字转语音
  10. sql注入工具--Sqlmap