前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot Cache 入门

SpringBoot Cache 入门

原创
作者头像
tanoak
发布于 2018-07-13 11:58:01
发布于 2018-07-13 11:58:01
6220
举报
文章被收录于专栏:java闲聊java闲聊
  1. 首先搭载开发环境,不会的可以参考笔者之前的文章SpringBoot入门
代码语言:txt
AI代码解释
复制
添加依赖
代码语言:txt
复制

<dependency>

代码语言:txt
AI代码解释
复制
 <groupId>org.springframework.boot</groupId>
代码语言:txt
AI代码解释
复制
 <artifactId>spring-boot-starter-cache</artifactId>
代码语言:txt
AI代码解释
复制
</dependency>
代码语言:txt
AI代码解释
复制
2.  开始配置Cache



    a. 在启动类增加一个注解@EnableCaching@SpringBootApplication@MapperScan("com.tanoak.mapper")

@EnableCaching

public class BootCacheApplication {



 public static void main(String[] args) {

 SpringApplication.run(BootCacheApplication.class, args);

 }

} 
代码语言:txt
AI代码解释
复制
b.  pojo
代码语言:txt
AI代码解释
复制
@Data

    public class Teacher {//使用Lombok注解



     private Integer id;

     private String lastName;

     private String email;

    

     /\*\*

     \*性别 1男  0女

     \*/

     private Integer sex;

     private Integer sId;

    } 
代码语言:txt
AI代码解释
复制
c. Mappe
代码语言:txt
AI代码解释
复制
 @Mappe

    public interface TeacherMapper {

    

     @Select("SELECT \* FROM teacher WHERE id =#{id}")

     Teacher getTeaById(Integer id);

    

     @Update("UPDATE teacher SET lastName =#{lastName},email=#{email},sex=#{sex},s\_id=#{sId} WHERE id=#{id}")

     Integer update(Teacher teacher) ;

    

     @Delete("DELETE FROM teacher WHERE id =#{id}")

     Integer deleteById(Integer id) ;

    

     @Insert("INSERT INTO teacher(lastName,email,sex,t\_id) VALUES(#{lastName},#{email},#{sex},#{sId})")

     Integer insert(Teacher teacher) ;

    }
代码语言:txt
AI代码解释
复制
d. Service
代码语言:txt
复制

public interface TeacherService {

代码语言:txt
AI代码解释
复制
 /\*\*
代码语言:txt
AI代码解释
复制
 \*  根据ID查询实体
代码语言:txt
AI代码解释
复制
 \* @param id
代码语言:txt
AI代码解释
复制
 \* @return
代码语言:txt
AI代码解释
复制
 \*/
代码语言:txt
AI代码解释
复制
 Teacher getEmpById(Integer id) ;
代码语言:txt
AI代码解释
复制
 Integer update(Teacher teacher) ;
代码语言:txt
AI代码解释
复制
 Integer remove(Integer id) ;
代码语言:txt
AI代码解释
复制
}
代码语言:txt
AI代码解释
复制
//实现类
代码语言:txt
AI代码解释
复制
@Service
代码语言:txt
AI代码解释
复制
public class TeacherServiceImpl implements TeacherService {
代码语言:txt
AI代码解释
复制
 private static final Logger logger = LoggerFactory.getLogger(TeacherServiceImpl.class);
代码语言:txt
AI代码解释
复制
 @Resource
代码语言:txt
AI代码解释
复制
 private TeacherMapper teacherMapper ;
代码语言:txt
AI代码解释
复制
 @Override
代码语言:txt
AI代码解释
复制
 @Cacheable(cacheNames = {"emp"},condition = "#id>0")
代码语言:txt
AI代码解释
复制
 public Teacher getEmpById(Integer id) {
代码语言:txt
AI代码解释
复制
 logger.info("进行查询实体 ID为"+id);
代码语言:txt
AI代码解释
复制
 return teacherMapper.getTeaById(id) ;
代码语言:txt
AI代码解释
复制
 }
代码语言:txt
AI代码解释
复制
 @Override
代码语言:txt
AI代码解释
复制
 public Integer update(Teacher teacher) {
代码语言:txt
AI代码解释
复制
 logger.info("修改的实体为"+teacher.toString());
代码语言:txt
AI代码解释
复制
 return teacherMapper.update(teacher) ;
代码语言:txt
AI代码解释
复制
 }
代码语言:txt
AI代码解释
复制
 @Override
代码语言:txt
AI代码解释
复制
 public Integer remove(Integer id) {
代码语言:txt
AI代码解释
复制
 logger.info("删除的实体 ID为"+id);
代码语言:txt
AI代码解释
复制
 return teacherMapper.deleteById(id) ;
代码语言:txt
AI代码解释
复制
 }
代码语言:txt
AI代码解释
复制
}
代码语言:txt
AI代码解释
复制
    e. Controlle@RestControllepublic class TeacherController {



 @Resource

 private TeacherService teacherService ;



 @GetMapping("/tea/{id}")

 @Cacheable(cacheNames = "tea")

 public Teacher getTea(@PathVariable("id")Integer id){

 return  teacherService.getEmpById(id) ;

 }

}
代码语言:txt
AI代码解释
复制
然后就开启缓存,本篇文章结束!开个玩笑,在正常的开发中,我们的CRUD需要进行缓存的环节一般是在查询,更新,删除,在一些特殊的业务场景下也会对插入进行缓存,这里不做考虑。然后我们根据需求想要解决这个问题,那么Cache对应的注解就出现了
代码语言:txt
AI代码解释
复制
#根据方法的请求参数对其结果进行缓存

    @Cacheable

    -----------

    #保证方法被调用,又希望结果被缓存。

    @CachePut

    ------------

    清空缓存

    @CacheEvict
代码语言:txt
AI代码解释
复制
了解这三个注解我们来看下如何使用吧

@Cacheable

这个注解有多个属性

代码语言:txt
AI代码解释
复制
key  缓存的 key 支持SpEl表达式



keyGenerator  自定义Key生成策略  二选一(key or keyGenerator)



condition   符合指定条件缓存



unless 条件为true不缓存 
代码语言:txt
AI代码解释
复制
@Override

 @Cacheable(cacheNames = "tea",key = "#id",condition = "#id>1")

 public Teacher getTeaById(Integer id) {

 logger.info("进行查询实体 ID为"+id);

 return teacherMapper.getTeaById(id) ;

}



@GetMapping("/tea/{id}")

 public Teacher getTea(@PathVariable("id")Integer id){

 return  teacherService.getEmpById(id) ;

 }

自定义KeyGenerato

代码语言:txt
AI代码解释
复制
public class MyKeyGenerator {



 @Bean("mykeyGenerator")

 public KeyGenerator keyGenerator(){

 return new KeyGenerator(){

 @Override

 public Object generate(Object target, Method method, Object ...params){

 return method.getName() +"{"+Arrays.asList(params) +"}";

 }

 };

 }

}
代码语言:txt
AI代码解释
复制
 @Cacheable(cacheNames = "tea",keyGenerator="mykeyGenerator")

 public Teacher getTeaById(Integer id) {

 logger.info("进行查询实体 ID为"+id);

 return teacherMapper.getTeaById(id) ;

 }





@GetMapping("/tea2/{id}")

 public Teacher getTea2(@PathVariable("id")Integer id){

 return  teacherService.getTeaById(id) ;

 }```



目前解决了查询的缓存,接下来处理更新的缓存



## @CachePut



这个注解是在方法执行完成后调用的与@Cacheable的调用顺序刚好相反

@GetMapping("/tea")

@CachePut(cacheNames = "tea")

public Teacher upTea(Teacher teacher){

teacherService.update(teacher) ;

return teacher ;

}`

b.png
b.png
c.png
c.png

可以看到,再次点击查询的时候没有发送sql语句,说明已经缓存成功

@CacheEvict

清空缓存,来认识一下

代码语言:txt
复制

@Override

@CacheEvict(cacheNames = "tea",key = "#id")

public Integer remove(Integer id) {

logger.info("删除的实体 ID为"+id);

// return teacherMapper.deleteById(id) ;

return 1 ;

}

//然后再Controller中调用

@GetMapping("/tea3/{id}")

public String delTea(@PathVariable("id")Integer id){

teacherService.remove(id) ;

System.out.println("测试删除缓存 id为"+id);

return "OK" ;

}`

Cache的基本用法到这里就结束了,下片文章我们深入探讨它的运行机制。如理解有误,请指正

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
linux学习--未整理命令
find /path -type f -exec rm -f {} ; 删除指定文件
solate
2019/07/19
1K0
linux常见的压缩指令
xzcat,xz -d,xzmore,xzgrep,xzless和等级压缩同gzip用法相同.
小柒吃地瓜
2020/04/23
5.5K0
19个Linux备份压缩命令
文 | 云豆 来源 | 菜鸟教程 云豆贴心提醒,本文阅读时间5分钟,文末有秘密! Linux ar命令 Linux ar命令用于建立或修改备存文件,或是从备存文件中抽取文件。 ar可让您集合许
小小科
2018/05/04
2K0
19个Linux备份压缩命令
Linux服务器备份工具(tar,cpio,dump)
1、备份前因考虑的因素 ● 可移植性(即在Red Hat Linux系统下执行的备份在另外一个系统上恢复的能力)。 ● 是否自动备份。 ● 执行备份的周期。 ● 需要把归档的备份保存多长时间。 ● 用户界面的友好性(决定是否需要选择基于GUI界面的工具还是基于文本的)。 ● 是否需要使用压缩技术、直接复制或者加密技术。 ● 备份介质(需要从价格、性能、存储能力上考虑)。 ● 是否远程备份或网络备份。 ● 是保存一个文件、一个子目录还是整个系统。
星哥玩云
2022/07/03
1.8K0
ORACLE备份恢复
备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本
全栈程序员站长
2022/09/13
2.8K0
ORACLE备份恢复
Linux 备份与恢复
实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统, 还会造成数据丢失。所以我们可以使用备份和恢复技术
用户9615083
2022/12/25
5.4K0
Linux 备份与恢复
【Linux】备份与恢复
-c : 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。
兮动人
2022/02/27
6K0
97 条 Linux 运维工程师常用命令总结
作者:jeanheo 1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和".." -l 列出文件的详细信息 -c 根据ctime排序显示 -t 根据文件修改时间排序 ---color[=WHEN] 用色彩辨别文件类型 WHEN 可以是'never'、'always'或'auto'其中之一 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅
小小科
2018/05/04
3.6K0
HAWQ技术解析(十五) —— 备份恢复
一、为什么还需要备份         HAWQ作为一个数据库管理系统,备份与恢复是其必备功能之一。HAWQ的用户数据存储在HDFS上,系统表存储在master节点主机本地。HDFS上的每个数据块缺省自
用户1148526
2018/01/03
2.2K0
HAWQ技术解析(十五) —— 备份恢复
linux下打包命令_linux常用命令全集
大家好,又见面了,我是你们的朋友全栈君。 linux系统中遇到要打包文件的时候我们该使用什么命令呢?下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux系统中打包文件的命令详解的相
全栈程序员站长
2022/09/23
1.6K0
生信入门必须掌握的 30 个 Linux 命令
修改工作目录,cd 和 ls 应该是使用最多的两个命令,尤其是对于 Linux 目录结构不熟的用户。
章鱼猫先生
2021/10/15
2.7K1
从零开始学PostgreSQL (六): 备份和恢复
PostgreSQL 提供了多种备份和恢复策略,旨在满足不同规模和需求的数据库环境。以下是 PostgreSQL 备份和恢复的主要方法概览:
DBA实战
2024/09/06
6530
从零开始学PostgreSQL (六): 备份和恢复
Linux私房菜:打包、压缩和备份
目前常见的Linux压缩命令包括有gzip、bzip2和最新的xz,下表是一些常见的压缩文件扩展名及对应指令关系:
happyJared
2018/10/25
1.6K0
Linux私房菜:打包、压缩和备份
PostgreSQL备份恢复实现
本文主要介绍pg_dump、pg_dumpall、copy、pg_basebackup的使用。
数据和云
2021/09/22
5.6K0
PostgreSQL备份恢复实现
PostgreSQL 备份与恢复(第一章)
PostgreSQL官方文档指定了以下三种备份方法,详见:https://www.postgresql.org/docs/current/backup.html
DB之路
2021/07/14
10K0
linux卸载nps,Linux NPS服务部署
yum install nfs-utils #如果检查的结果是没有安装,则使用该命令安装
全栈程序员站长
2022/08/15
1.4K0
数据库PostrageSQL-备份和恢复
由于包含着有价值的数据,PostgreSQL数据库应当被定期地备份。虽然过程相当简单,但清晰地理解其底层技术和假设是非常重要的。 有三种不同的基本方法来备份PostgreSQL数据:
cwl_java
2020/12/22
2.3K0
快速备份恢复工具mydumper/myloader
一 前言 大家对于MySQL的逻辑备份工具mysqldump应该都比较了解,本文介绍一款由MySQL ,Facebook 等公司的开发维护另外一套逻辑备份恢复工具---mydumper/myloader。 目前已经开发到0.9.1 版本。 mydumper 具有如下特性 1 支持多线程导出数据,速度比mysqldump快,生产上150G 导出到本地SSD磁盘40min 。 2 支持一致性备份,使用FTWRL(FLUSH TABLES WITH READ LOCK)会阻塞DML语句,保证备份数据的一致性。 3 支持将导出文件压缩,节约空间。 4 支持多线程恢复。 5 支持以守护进程模式工作,定时快照和连续二进制日志 6 支持按照指定大小将备份文件切割。 7 数据与建表语句分离。
用户1278550
2018/08/09
5.4K0
Linux快速入门02-文件系统管理
继续进入Linux文件系统的学习,加油,早日突破MS压在自己身上的那道束缚。 文件属性基本概念:文件所有者,文件组,其他人。 对上图来说,-rw-r—r—表示文件的权限,1表示连接数,两个root分
用户1216676
2018/01/24
1.3K0
Linux快速入门02-文件系统管理
GreenPlum备份和恢复工具之gpbackup和gprestore
Greenplum数据库支持并行和非并行方法来备份和还原数据库。并行操作可扩展,而与系统中段的数量无关,因为段主机各自将数据同时写入本地磁盘存储中。对于非并行备份和还原操作,必须通过网络将数据从网段发送到主服务器,主服务器将所有数据写入其存储中。除了将I/O限制在一台主机之外,非并行备份还要求主服务器具有足够的本地磁盘存储空间来存储整个数据库。
AiDBA宝典
2023/11/06
2.1K1
GreenPlum备份和恢复工具之gpbackup和gprestore
相关推荐
linux学习--未整理命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档