第一步开启缓存(只要是springboot项目就可以)  数据库连接等相关配置请读者自行实现。

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

@SpringBootApplication
@EnableCaching
public class SpringCacheApplication { public static void main(String[] args) {
SpringApplication.run(SpringCacheApplication.class, args);
} }

在Service 或者Controller中使用缓存  在方法上使 @Cacheable 使用缓存,使用缓存必须要定义缓存组件的名字

  也就是设置cacheNames 可以有多个

@Controller
public class UserController {
@Autowired
UserService userService; private Logger logger = LoggerFactory.getLogger(UserController.class); @RequestMapping("/getUser/{id}")
@ResponseBody
@Cacheable(cacheNames = {"temp"}) //@Cacheable(cacheNames = {"temp"},key = "")
public User getUser(@PathVariable("id") int id){
logger.info("进入方法getUser方法并访问数据库,没有缓存");
User userById = userService.getUserById(id);
return userById;
}
}

第一次访问getUser/1  的时候是没有缓存的,控制台会打印一条info日志

第二次访问的时候,就会通过缓存去查询数据,不会打印该日志

可以通过日志打印方式查看缓存是否生效

下面介绍缓存其他的知识:

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

  使用JSR-107需要导入 javax.cache依赖 (cache-api)

Spring缓存抽象

  底层与是JSR-107  

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

  提供了各种缓存实现如:RedisCache , EhCacheCache , ConcurrentMapCache等

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

  注意:
    1.确定方法需要被缓存以及他们的缓存策略
    2.从缓存中读取之前缓存存储的数据

  重要的接口和缓存注解
    Cache:缓存接口,定义缓存操作
CacheManager:缓存管理器,管理各种缓存组件
@Cacheable:主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CacheEvict:清空缓存
@CachePut:保证方法被调用,又希望结果被缓存,更新缓存
@EnableCaching:开启基于注解的缓存
keyGennerator:缓存数据时key生成策略
serialize:缓存数据时value序列化策略

  @Cacheable
    属性:
      cacheNames/value:缓存组件名称
      key:缓存数据时使用的key 默认使用方法参数的值,可以通过编写SpEL表达式制定
        SpEL可以使用的值:
        前面请添加#root. 如#root.method
        methodName:当前被调用的方法名
        method:当前被调用的方法
        target:当前被调用的目标对象
        targetClass:当前被调用的目标对象类
        args:当前被调用的方法的参数列表
        caches:当前方法调用使用的缓存列表
        argument name:方法参数的名字 可以直接使用 #参数名 或#0(下标方式)
        result:方法执行的返回值

    keyGenerator:key的生成器 和key二选一

    cacheManager:指定缓存管理器
    cacheResolver:缓存解析器 和cacheManager 二选一
    condition:指定符合条件的情况下才缓存
    unless:不符合条件缓存,可以获取结果进行判断
    sync:缓存是否使用异步

如果没有指定缓存如redis等 缓存是存在concurrentHashMap中的

知识点来自于bilibili视频  地址:https://www.bilibili.com/video/av56568003?p=4

SpringBoot使用简单缓存的更多相关文章

  1. springboot集成Guava缓存

    很久没有写博客了,这段时间一直忙于看论文,写论文,简直头大,感觉还是做项目比较舒服,呵呵,闲话不多说,今天学习了下Guava缓存,这跟Redis类似的,但是适用的场景不一样,学习下吧.今天我们主要是s ...

  2. springboot整合redis缓存一些知识点

    前言 最近在做智能家居平台,考虑到家居的控制需要快速的响应于是打算使用redis缓存.一方面减少数据库压力另一方面又能提高响应速度.项目中使用的技术栈基本上都是大家熟悉的springboot全家桶,在 ...

  3. springboot(12)Redis作为SpringBoot项目数据缓存

    简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...

  4. 【转】asp.net mvc3 简单缓存实现sql依赖

    asp.net mvc3 简单缓存实现sql依赖   议题 随 着网站的发展,大量用户访问流行内容和动态内容,这两个方面的因素会增加平均的载入时间,给Web服务器和数据库服务器造成大量的请求压力.而大 ...

  5. springboot+thymeleaf简单使用

    关于springboot想必很多人都在使用,由于公司项目一直使用的是SpringMVC,所以自己抽空体验了一下springboot的简单使用. 环境搭建 springbooot的环境搭建可以说很灵活, ...

  6. springboot整合redis缓存

    使用springBoot添加redis缓存需要在POM文件里引入 org.springframework.bootspring-boot-starter-cacheorg.springframewor ...

  7. spring boot 学习(十四)SpringBoot+Redis+SpringSession缓存之实战

    SpringBoot + Redis +SpringSession 缓存之实战 前言 前几天,从师兄那儿了解到EhCache是进程内的缓存框架,虽然它已经提供了集群环境下的缓存同步策略,这种同步仍然需 ...

  8. Springboot中使用缓存

    在开发中,如果相同的查询条件去频繁查询数据库, 是不是会给数据库带来很大的压力呢?因此,我们需要对查询出来的数据进行缓存,这样客户端只需要从数据库查询一次数据,然后会放入缓存中,以后再次查询时可以从缓 ...

  9. Springboot接口简单实现生成MySQL插入语句

    Springboot接口简单实现调用接口生成MySQL插入语句 在实际测试中,有这样一个需求场景,比如:在性能压力测试中,可能需要我们事先插入数据库中一些相关联的数据. 我们在实际测试中,遇到问题,需 ...

随机推荐

  1. PHP restore_error_handler() 函数

    定义和用法 restore_error_handler() 函数恢复之前的错误处理程序. 该函数用于在通过 set_error_handler() 函数改变后恢复之前的错误处理程序. 该函数总是返回 ...

  2. 5.5 省选模拟赛 B Permutation 构造 贪心

    LINK:Permutation 对于这种构造神题 我自然是要补的.为啥就我没想出来哇. 30分还是很好写的 注意8!实际上很小 不需要爆搜 写bfs记录状态即可.至于判断状态是否出现与否 可以开ma ...

  3. Typora + PicGo-Core + Custom Command 实现上传图片到图床

    教程参考 Typora+PicGo-Core(command line)+Gitee实现图片上传到图床 主要借鉴 picgo 操作命令 Typora + PicGo + Gitee 实现图片自动上传到 ...

  4. Java和Scala容器转换

    参考:https://blog.csdn.net/dymkkj/article/details/77921573 Java和Scala互操作的一个重要的内容就是容器的转换,容器是一个语言的数据结构,表 ...

  5. spring data jpa 代码生成!!(精华帖)

    通过数据库动态生成自己想要生成的各种模板,需要了解grovery. view -> Tool Windows -> Database + -> Data source -> M ...

  6. webgl实现发光线框(glow wireframe)效果

    在之前这篇文章, WebGL 单通道wireframe渲染 我们介绍了webgl如何实现单通道wireframe的效果. 本篇文章就是在此技术原理基础之上,来实现发光的wireframe效果. 要实现 ...

  7. C# ASP 分析器错误信息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

    在本地运行的应用,部署到服务器上出现错误.原因是web.config 中:<compilation debug="true" targetFramework="4. ...

  8. java 增强for循环与泛型

    一 增强for循环 增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的.它的内部 原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作 ...

  9. 【Gin-API系列】配置文件和数据库操作(三)

    我们前面已经实现了API的基础版本,能对参数校验和返回指定数据,这一章,我们将对主机和交换机进行建模,存入数据库. 考虑到数据库安装和使用的简便性,我们采用文档存储结构的MongoDB数据库. Mon ...

  10. C#LeetCode刷题之#671-二叉树中第二小的节点(Second Minimum Node In a Binary Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4100 访问. 给定一个非空特殊的二叉树,每个节点都是正数,并且每 ...