一、概述

  缓存的目的是:通过Cache来缓存不经常改变的数据以提高系统性能和增加系统吞吐量,避免直接访问数据库等低速的存储系统。

  Spring Cache对Cache进行抽象,提供了@Cacheable、@CachePut、@CacheEvict等注解。

  可用于单体应用系统,也可集成Redis等缓存服务器用于大型系统或者分布式系统。

  Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;提供了对现有Spring应用程序透明地添加缓存的支持。与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小。

  提供了基于注解的缓存配置方法。它本质上不是一个具体的缓存实现方案(例如EHCache),而是一个对缓存使用的抽象,通过在已有代码中打上几个预定义的注释,就可以实现我们希望达到的缓存效果。SpringCache支持跟第三方缓存例如EHCache集成;另外也提供了开箱即用的默认实现,可以直接拿来使用。

  SpringCache支持使用SpEL(Spring Expression Language)来定义缓存的key和各种condition,因此具备相当的灵活性,并可以支持非常复杂的语义。

  Spring 4.1开始,通过JSR-107注释和更多定制选项的支持,简化开发,缓存抽象得到了显着改善。

  • Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;

  • Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache ,ConcurrentMapCache等;

  • 每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。

  • 使用Spring缓存抽象时我们需要关注以下两点;

    1、确定方法需要被缓存以及他们的缓存策略

    2、从缓存中读取之前缓存存储的数据

二、Spring Cache缓存管理器

  由于是springframework的内置功能,使用springcache并不需要额外引入jar包。因此只需要简单的配置就可以启用开箱即用的默认缓存实现。

  但是在springboot中使用需要做如下操作

2.1、基础用法步骤

1、pom依赖

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

2、缓存类型配置

  在application.properties中配置属性

spring.cache.type=Simple
  • Simple:基于ConcurrentHashMap实现的缓存,只适合单体应用或者开发环境使用。Spring自带的缓存类型,这个缓存与Spring Boot应用在同一个Java虚拟机内,适合单体应用系统。
  • None:禁止使用缓存。
  • Redis:使用Redis缓存。
  • …………

3、启动或者配置类上加入@EnableCaching注解来开启缓存注解。

//开启缓存注解
@EnableCaching
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application .class, args);
}
}

注意:使用默认的缓存,即内存方式的 ConcurrentHashMap ,如果

    @Override
@Cacheable(unless = "#result == null")
public AccountBalance selectOne(AccountBalance entity) {
Wrapper<AccountBalance> wrapper = new QueryWrapper<>(entity);
return this.getOne(wrapper);
}

  这样设置,每次请求不是一个对象,但是key是对象,所以每次都不能命中,但是在redis中一般情况是一个以序列化字符串作为一个key,故是一个key

    @Override
@Cacheable(unless = "#result == null")
public AccountBalance selectOne(Long id) {
return this.getById(id);
}

  使用此种配置,均是以id为key。不存在分歧

  

001-spring cache 简介的更多相关文章

  1. Spring Cache 简介

    org.springframework.cache; org.springframework.cache.Cache org.springframework.cache.CacheManager 依赖 ...

  2. Spring Boot 2.X(七):Spring Cache 使用

    Spring Cache 简介 在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 ...

  3. 基于Spring Cache实现二级缓存(Caffeine+Redis)

    一.聊聊什么是硬编码使用缓存? 在学习Spring Cache之前,笔者经常会硬编码的方式使用缓存. 我们来举个实际中的例子,为了提升用户信息的查询效率,我们对用户信息使用了缓存,示例代码如下: @A ...

  4. Spring Cache抽象详解

    缓存简介 缓存,我的理解是:让数据更接近于使用者:工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存):缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/I ...

  5. Spring Cache 笔记

    @(Java ThirdParty)[Spring Cache] Spring Cache Abstraction 简介 Spring Cache提供了对底层缓存使用的抽象,通过注解的方式使用缓存,减 ...

  6. Spring Boot从入门到精通之:一、Spring Boot简介及快速入门

    Spring Boot Spring Boot 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来 ...

  7. 转:Spring Cache抽象详解

    缓存简介 缓存,我的理解是:让数据更接近于使用者:工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存):缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/I ...

  8. SpringBoot--使用Spring Cache整合redis

    一.简介 Spring Cache是Spring对缓存的封装,适用于 EHCache.Redis.Guava等缓存技术. 二.作用 主要是可以使用注解的方式来处理缓存,例如,我们使用redis缓存时, ...

  9. Spring cache简单使用guava cache

    Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...

  10. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

随机推荐

  1. Oracle 之 SQL 面试题 录

    多上网查查   SQL 面试题 1.学号(自动编号) 姓名 性别 年龄­ 0001 xw 男 18­ 0002 mc 女 16­ 0003 ww 男 21­ 0004 xw 男 18­ 请写出实现如下 ...

  2. Hadoop参数汇总

    linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓冲区 Linux的内核的IO ...

  3. jQuery页面刷新(局部、全部)问题分析

    本文实例分两部分对jquery刷新问题进行介绍,第一部分介绍了呢页面局部刷新:第二部分介绍了页面全部刷新第一:页面局部刷新 jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属 ...

  4. ChemDraw常用到的几种技巧

    ChemDraw对于化学学习的重要性相当于CAD和建筑学.PS和设计,所以如果你是一名生化相关的工作人员,拥有ChemDraw并掌握ChemDraw的使用方法十分必要!这是一款对于我们研究化学的人来说 ...

  5. NHibernate初学一之简单增删改查

    以前有简单了解NHibernate,但因项目一直没有运用所以也没有机会进行一个详细了解:最近利用一点空闲的时间认真学习它:同样希望把学习过程进行简单记录,今天简单写一个针对MSSQL数据库的增删改查的 ...

  6. 【RF库Collections测试】Dictionary Should Not Contain Key

    Name:Dictionary Should Not Contain KeySource:Collections <test library>Arguments:[ dictionary ...

  7. Linux alias 命令

    alias命令用于查看或设置命令别名,但仅作用于该次登陆的会话,若要永久使用别名,可在 ~/.bashrc 中设定别名 [root@localhost ~]$ alias // 查看别名 [root@ ...

  8. HTTP 请求过程

    如下,我们在浏览器输入一个域名,按回车之后,便向该域名对应的服务器发送了一个请求:服务器接收到这个请求后进行处理和解析,然后返回响应的内容给浏览器,浏览器再对其进行解析然后呈现网页 我们可以通过 Ch ...

  9. 基于Cocos2d-x学习OpenGL ES 2.0系列——使用VBO索引(4)

    在上一篇文章中,我们介绍了uniform和模型-视图-投影变换,相信大家对于OpenGL ES 2.0应该有一点感觉了.在这篇文章中,我们不再画三角形了,改为画四边形.下篇教程,我们就可以画立方体了, ...

  10. php学习七:时间和日期

    在学习php中的时间和日期的时候,必须要了解什么是时间戳,那么什么是时间戳呢,请看一下的定义 时间戳:从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数 ...