Springboot高级特性——缓存
springboot的缓存可以让我们系统性能提升,比如每次查询数据库的时候,如果设置了缓存,那么第二次查询同一数据那便直接从缓存中取值。
1,启动缓存
//com.quking.springboot01cache.Springboot01CacheApplication
@MapperScan("com.quking.springboot01cache.mapper")
@SpringBootApplication
@EnableCaching //在启动项中允许缓存
public class Springboot01CacheApplication {public static void main(String[] args) {SpringApplication.run(Springboot01CacheApplication.class, args);}
}
2,在方法中设置缓存
@Service
public class EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;@Cacheable(cacheNames = "emp",condition = "#id>0") //id>0的时候才缓存,可以指定条件 public Employee getEmployeeById(Integer id){//cacheNames 指定名称 condition指定条件System.out.println("正在查询"+id+"号员工");Employee employee = employeeMapper.getEmployeeById(id);return employee;}
}
3,写一个控制类来测试
@RestController
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@GetMapping("/emp/{id}")public Employee getEmployeeById(@PathVariable("id") Integer id){Employee employee = employeeService.getEmployeeById(id);return employee;}
}
接口(基于注解的mybatis):
@Mapper
public interface EmployeeMapper {@Select("select * from employee where id = #{id}")public Employee getEmployeeById(Integer id);@Delete("delete from employee where id = #{id}")public void deleteEmployee(Integer id);
}
这是服务层(每次查询数据库都会打印:正在查询"+id+"号员工)
@Service
public class EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;@Cacheable(cacheNames = "emp",condition = "#id>0") //id>0的时候才缓存,可以指定条件public Employee getEmployeeById(Integer id){System.out.println("正在查询"+id+"号员工"); //如果每次查询数据库都会调用这个Employee employee = employeeMapper.getEmployeeById(id);return employee;}
}
@Cacheable 里面的参数 :
cacheNames :缓存名字
condition:缓存条件,可以传EL表达式,如上
key:缓存数据使用的key,默认是方法参数
unless:否定缓存 当unless指定的条件为TRUE时,方法的返回值不会被缓存,可以获取结果
进行判断 unless="#result=null" 表示结果返回值为null时,不缓存
sync:是否使用异步
如果后台没有打印说明调用缓存,不是查询的数据库。localhost:8080/emp/1 测试
@CachePut
修改数据库后,自动更新缓存,也就是说修改数据库后,下次用查询数据库就不用去数据库中查找,直接从缓存中取出来。
@CacheEvict
缓存清除
Springboot高级特性——缓存相关推荐
- SpringBoot高级特性
SpringBoot高级特性 SpringBoot缓存 基本环境搭建 导入数据库文件,创建出 department 和 employee 数据表 创建 JavaBean 封装数据 整合 Mybatis ...
- redis 经纬度_【SpringBoot DB 系列】Redis 高级特性之 GEO
[SpringBoot DB 系列]Redis 高级特性之 GEO GEO 用于存储地理信息,最直观的就是我们日常使用的地图 app 中,如果我想查询我所在地的周边餐饮,就可以利用 geo 中的以(x ...
- Redis基础用法、高级特性与性能调优以及缓存穿透等分析
目录 一.Redis介绍 二.Redis数据结构及常用的命令 三.Redis持久化策略选择 四.内存管理与数据淘汰机制 五.Redis过期策略及实现原理 1 说明 2 设置过期时间 3 三种过期 ...
- SpringBoot高级-缓存-搭建redis环境测试
实际开发中我们用的是缓存中间件,比如我们经常使用的Redis,memcache,包括ehcache,我们都是用一些缓存中间件,Springboot支持很多缓存的配置,而默认开启的是SimpleCach ...
- 4.2.4 Kafka高级特性解析(物理存储、稳定性:事物,控制器,可靠性,一致性,_consumer_offsets、延时队列、自定义重试队列)
Kafka高级特性解析 文章目录 Kafka高级特性解析 2.5 物理存储 2.5.1 日志存储概述 2.5.2 日志存储 2.5.2.1 索引 2.5.2.1.1 偏移量 2.5.2.1.2 时间戳 ...
- Nacos高级特性Raft算法以及原理和源码分析
Nacos高级特性Raft算法以及原理和源码分析 对比springcloud-config配置中心 springcloud-config工作原理 Nacos的工作原理图 springcloud-con ...
- springboot高级篇及springboot1.5转springboot2.17所遇到的坑
SpringBoot的高级教程 一.SpringBoot缓存 缓存的场景 临时性数据存储[校验码] 避免频繁因为相同的内容查询数据库[查询的信息] 1.JSR107缓存规范 用的比较少 Java Ca ...
- Dubbo(二):Dubbo 基础配置Xml、注解方式 和 高级特性
Dubbo的基础配置 Xml方式 注解方式 Dubbo的基础配置使用 启动时检查 超时重连 集群容错 负载均衡配置 结果缓存 服务分组 多版本 只订阅/只注册 异步调用 事件通知 参数回调 本地伪装- ...
- Spark Streaming高级特性在NDCG计算实践
从storm到spark streaming,再到flink,流式计算得到长足发展, 依托于spark平台的spark streaming走出了一条自己的路,其借鉴了spark批处理架构,通过批处理方 ...
最新文章
- Android 插件化原理解析——Hook机制之AMSPMS
- 企业官网示例以及数据库表结构
- POJ 并查集 题目汇总 ——czyuan原创(转)
- 自己实现简单的AOP(三) 实现增强四项基本功能
- java 主方法 this_java main 方法怎么创建
- MapReduce操作时Error:The method setInputPaths(JobConf, String) in the type FileInputFormat is not
- PHPCMS V9 为今天或几天前文章加new
- 19SpringMvc_在业务控制方法中收集List集合中包含JavaBean参数
- 上海的雨什么时候才可以停...
- Spring Batch 4.2.0.M1 发布,批处理应用编写框架
- Java和JavaScript中使用Json方法大全
- java看懂程序_手把手教你运行第一个 Java 程序,看不懂你来骂我!
- 日常小tip_Bat命令运行Java程序
- keevi源地址_2019年越狱源地址排行是怎样的?
- 航空三字代码表_航空公司二字及三字代码表
- pythonend输出最后没有逗号_python不换行之end=与逗号的意思及用途
- 随机数——不可预测性的源泉
- 科研小白之SCI论文、EI论文和IEEE论文有什么区别?国内分区与SCI等的联系
- 电信运营商基于 MQTT 协议 构建千万级 IoT 设备管理平台
- 为何魅族智能家居生态圈更值得期待