JSR-107、Spring缓存抽象、整合Redis

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设置。

二、Spring缓存抽象
Spring从3.1开始定义了org.springframework.cache.Cache 和org.springframework.cache.CacheManager接口来统一不同的缓存技术; 并支持使用JCache(JSR-107)注解简化我们开发;
• Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; • Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache , ConcurrentMapCache等;
• 每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否 已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法 并缓存结果后返回给用户。下次调用直接从缓存中获取。 • 使用Spring缓存抽象时我们需要关注以下两点; 1、确定方法需要被缓存以及他们的缓存策略 2、从缓存中读取之前缓存存储的数据

三、几个重要概念&缓存注解
Cache 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、 ConcurrentMapCache等 CacheManager 缓存管理器,管理各种缓存(Cache)组件
@Cacheable 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CacheEvict 清空缓存
@CachePut 保证方法被调用,又希望结果被缓存。
@EnableCaching 开启基于注解的缓存
keyGenerator 缓存数据时key生成策略
serialize 缓存数据时value序列化策略

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

转载于:https://www.cnblogs.com/xiaohouye/p/11165270.html

spring Boot 学习(一、Spring Boot与缓存)相关推荐

  1. spring框架学习 - 使用 Spring 的面向切面编程 补充1

    接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122050740?spm=1001.2014.3001.5502 6.选择要使用的 ...

  2. spring框架学习 - 使用 Spring 的面向切面编程

    接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122029896?spm=1001.2014.3001.5502 七.使用 Spri ...

  3. spring boot 学习(二)spring boot 框架整合 thymeleaf

    spring boot 框架整合 thymeleaf spring boot 的官方文档中建议开发者使用模板引擎,避免使用 JSP.因为若一定要使用 JSP 将无法使用. 注意:本文主要参考学习了大神 ...

  4. Spring Boot学习笔记——Spring Boot与ActiveMQ的集成

    Spring Boot对JMS(Java Message Service,Java消息服务)也提供了自动配置的支持,其主要支持的JMS实现有ActiveMQ.Artemis等.这里以ActiveMQ为 ...

  5. 2014-03-09 Spring的学习(1)------Spring管理Bean(实例化Bean)

    2019独角兽企业重金招聘Python工程师标准>>> 1.搭建与测试Spring的开发环境 PS: Spring-beans-2.5.xsd  (为使在Beans.xml操作顺畅) ...

  6. 【Spring MVC学习】spring mvc入门示例

    之前进公司就直接使用spring mvc做项目了,并没有系统学习过,后来再回头去总结的时候发现我只是在项目中会使用,但是有关spring mvc的配置,还有注解什么的想起来会感觉很混乱,趁着这几天不忙 ...

  7. spring框架学习 - 使用 Spring 的面向切面编程补充

    接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122047698?spm=1001.2014.3001.5502 4.4 声明通知 ...

  8. [Spring入门学习笔记][Spring的AOP原理]

    AOP是什么? 面向切面编程 软件工程有一个基本原则叫做"关注点分离"(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的 ...

  9. Spring 系统学习:Spring的事务管理---事务回顾

    1.事务:逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败. 2.事务的特性: 原子性:事务不可分割: 一致性:事务执行前后,数据的完整性保持一致: 隔离性:一个事务的执行不应该受 ...

  10. Spring Cloud学习 之 Spring Cloud Hystrix(断路器原理)

    断路器定义: public interface HystrixCircuitBreaker {// 每个Hystrix都通过它判断是否被执行public boolean allowRequest(); ...

最新文章

  1. android悬浮按钮弹出与隐藏,Android悬浮窗按钮实现点击并显示/隐藏多功能列表
  2. windowservice创建及部署
  3. 【渝粤教育】电大中专会计电算化 (2)作业 题库
  4. git学习入门~~~
  5. 前端开发工程师和美工 知识需求的区别
  6. 系统学习 TypeScript(三)——基础类型
  7. pandas —— pd.read_csv 与df.to_csv
  8. 项目本地发布到github并且上线可预览
  9. pr基础操作与快捷键(基于pr cc 2017)
  10. c语言常用基础代码大全,C语言基础入门必读
  11. 为什么重复率高的字段不适合作为索引
  12. 人工智能发展与应用综述--(科普)
  13. 微信web开发工具 移动设备调试
  14. 微信微网站需要服务器吗,一分钟搭建微信微网站
  15. 禁用Windows10系统驱动程序强制签名的简单方法
  16. 传感器检测技术——传感器的静态特性
  17. 第一本书 第九章 使用对象吃货联盟
  18. 时序卷积网络 | Python实现TCN时序卷积网络数据预测
  19. 【LeetCode 459 】重复的子字符串
  20. 17栋杭州东站旁的别墅,“麒麟计划”这个大招,远比你想象的厉害!

热门文章

  1. 2021 软件开发的 5 大趋势,低代码、无代码得到了验证!
  2. 假如你是架构师,你要做些什么
  3. 看了Google大神Jeff Dean的传说后,我跪了!这才是真的大神
  4. 你在直播上看不到的 Google IO
  5. UVALive 6181
  6. 刚开始学习.NET 怎么样能使自己学习的更快点啊?
  7. PAT B1035 插入与归并 (25 分)
  8. 监控服务器ssh登录,并发送报警邮件
  9. HTTP Keep-Alive详解[转]
  10. [bzoj2299][HAOI2011]向量