大家在项目开发过程中,或多或少都用过缓存,为了减少数据库的压力,把数据放在缓存当中,当访问的请求过来时,直接从缓存读取。缓存一般都是基于内存的,读取速度比较快,市面上比较常见的缓存有:memcache、redis、mongodb、guava cache等。

缓存的常规用法

大家使用缓存时,常用的逻辑时这样的:

  1. 根据条件生成key;
  2. 从缓存中读取数据,若成功读取数据,则返回;
  3. 若数据不存在,根据条件从数据库读取;
  4. 将从数据库中读取的数据放入缓存;
  5. 返回数据;

每一个使用缓存的场景,上面的逻辑都要重写一遍,是不是很烦躁,是不是很浪费时间。有没有简单的方法完成上面的逻辑?当然有了,这就是今天要向大家介绍的Spring Cache。

Spring Cache

Spring Cache并不神秘,而且使用起来非常的方便。它是注解组成的,最常用的一个注解是@Cacheable。这个注解是在方法上使用的,当使用了注解的方法被调用时,会先从缓存中查询,如果缓存中不存在,则执行方法,然后将方法的返回值放入缓存中。具体的使用方法如下:

首先,我们在IDEA中使用Spring Boot搭建环境,在选择依赖的页面中,我们选择了Lombok和Cache,最主要的选择Cache哦~ 项目搭建完毕后,我们看一下pom.xml的依赖:

我们看到在依赖中自动添加了cache。接下来我们要在SpringBoot的启动类上加上使用cache的注解@EnableCaching,如图:

然后我们编写测试的controller,如下:

我们使用@RestController注解,所以它返回的是Json格式的结果。然后在方法上使用了@Cacheable注解,这是我们今天的主角。

  • cacheNames:当系统中有多个缓存时,指定该方法使用其中的哪几个缓存。
  • key:缓存的key,可以使用spEL表达式,上面的例子中,使用了入参name。

还有其他的关键字,在这里没有列出来,比如:

  • sync :true或false,当并发量非常大时,将同步开启,可以保证只有一个线程执行方法,其他线程将等待,然后从缓存中读取数据。
  • condition:使用缓存的条件。
  • keyGenerator:指定key的生成器。

我们启动项目,并在浏览器第一次访问http://localhost:8080/cache/test?name=allen,结果响应很慢,过了5秒后,页面显示结果:

我们在看一下后台日志:

打印语句打印出来了,说明第一次访问时,是执行了方法的。我们再在浏览器请求相同的地址,结果返回了相同的结果,而且后台没有打印出日志,和上面两张图一模一样。说明这次请求走了缓存,方法并没有执行。

总结

怎么样?@Cacheable很好用吧,大家赶快动手,在项目中实践一下吧,如果觉得文章还不错,可以关注一下下方我的公众号,更多干货好文等你来撩,谢谢!

@transactional可以用在controller层吗_Spring还可以这样用缓存,你知道吗?相关推荐

  1. @transactional可以用在controller层吗_石晶地板可以用在浴室吗?

    石晶地板可以用在浴室吗?石晶地板最大的一个特性就是防水了,所以它完全可以用在浴室,石晶地板的独特防水性能,解决了普通木地板不防水的一个难题,具有革命性的意义,从此木地板再也不怕水了. 一说到木地板,大 ...

  2. 实战SSM_O2O商铺_41【前端展示】店铺列表页面Dao+Service+Controller层的实现

    文章目录 概述 Dao层 接口 映射文件 单元测试 Service层 接口方法 单元测试 Controller层 增加 ShopListController 单元测试 Github地址 概述 在完成了 ...

  3. 实战SSM_O2O商铺_39【前端展示】首页轮播图和一级商铺Dao+Service+Controller层的实现

    文章目录 概述 HeadLine Dao层 接口 映射文件 单元测试 HeadLine Service层 接口 实现类 单元测试 ShopCategory Dao层完善 映射文件完善 单元测试 Con ...

  4. 实战SSM_O2O商铺_36【商品】商品列表之Dao+Service+Controller层的实现

    文章目录 概述 Dao层 ProductDao.java ProductDao.xml 单元测试 Service层 ProductService.java ProductServiceImpl.jav ...

  5. 实战SSM_O2O商铺_05集成SSM后验证DAO层、Service层、Controller层的配置

    文章目录 概述 验证DAO层的配置 接口 SQL映射文件 单元测试类 基类 DAO层单元测试类 验证Service层的配置 接口以及实现类 单元测试类 验证Controller层的配置 控制层 启动服 ...

  6. mvc 怎么把后台拼接好的div写到前台_五、controller层配置和前台数据crud操作的实现...

    这个系列专栏的完结可能比我想象要快一些.不过可能将来要完善这个项目的时候还会加以改进.我今天争取把最后一层:控制层的代码给写完.明天最后一篇博文将讲讲Session.cookie对用户登录的控制,并最 ...

  7. controller层要写什么_别再写满屏的try-catch了,真丑,全局异常处理不会吗?

    本文讲得比较细,所以篇幅较长.请认真读完,希望读完后能对统一异常处理有一个清晰的认识. 背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所 ...

  8. java domain层_java框架中的controller层、dao层、domain层、service层、view层

    1.Controller层:接口层,用户访问请求时对接. Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置 ...

  9. Controller 层实现

    一.实验介绍 1.1 实验内容 本节课程主要利用 Spring MVC 框架实现 Controller 层以及一些辅助类的实现. 1.2 实验知识点 Spring MVC 框架 1.3 实验环境 JD ...

最新文章

  1. 年薪75万的真实技术面试实践攻略(篇章一)
  2. 【图文讲解】eclipse中配置maven环境+导入maven项目
  3. SQL2008如何创建定时任务作业
  4. 12月13日 什么是help_method,session的简单理解, find_by等finder method
  5. 开发项目的简单流程(需求、数据库、编码)
  6. 代写python作业 费用_代写dither method作业、代做python程序设计作业、代写python语言作业、代做Image Dithering作...
  7. 《白话强化学习与PyTorch》第1章 强化学习是什么----读书笔记
  8. Spring Batch 入门教程
  9. 【ANSYS命令流】通用后处理技术(三):列表显示结果及输出TXT文本(实例)
  10. Google Guice简介
  11. Android访问assets本地Json文件
  12. 切身体验苹果Reminders的贴心设计
  13. 08年最感人的文章,不信你不哭
  14. PReLU与ReLU
  15. 【Acm】算法之美—Crashing Balloon
  16. 代理服务器软件_CCProxy
  17. 030:判断能否被3,5,7整除
  18. 网络安全——会话层安全协议
  19. 移动开发变现指南,应用内如何添加Banner广告位?
  20. BQ25611D中文手册

热门文章

  1. php 服务器 mac地址吗,php获取服务器端mac和客户端mac的地址
  2. 旺旺上显示已上传服务器,在服务器上排除问题的头五分钟 | 旺旺知识库
  3. java 静态类实例_Java中多个类的静态实例?
  4. 声谱图,梅尔语谱,倒谱,梅尔倒谱系数
  5. TensorFlow:递归神经网络
  6. Python中str.format()字典及list传入详解
  7. Django 使用第三方服务发送电子邮件
  8. 【整理】Laravel中Eloquent ORM 关联关系的操作
  9. 基于vue-cli的webpack配置优化
  10. Optical Flow related Tutorials