springboot缓存篇之内置缓存

前言

前面我们讲了mybatis的一级缓存和二级缓存,这种缓存是基于持久层的缓存,存在很大的局限性。这篇文章主要分享一下另外的一种缓存方式,springboot的内置缓存,看看内置缓存的用法和它的优劣。

开启缓存

在使用springboot的内置缓存之前必须做以下两个步骤:

引入依赖

xml 复制代码
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

开启缓存

在启动文件加上@EnableCaching注解即可

java 复制代码
@EnableCaching
public class DemoGwStartApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoGwStartApplication.class, args);
    }
}

缓存注解

@Cacheable

两个重要的属性 :value和key

其中key指定的是数据在缓存中存储的键,value是只要使用的缓存名称

作用:在方法执行前 Spring 先查看缓存中是否有数据,若有,则直接返回缓存数据:若无数据,则调用方法将方法返回值放入缓存中。

例子:

java 复制代码
@Override
@Cacheable(value = "goods-info", key = "#id")
public Goods info(Long id) {
    log.info("从数据库获取");
    return goodsMapper.selectByPrimaryKey(id);
}

看控制台日志可以发现,只有第一次会打印"从数据库获取",后续运行接口就直接从缓存中拿,不会再执行方法里面的内容了。

@CachePut

同样的该方法也是有两个重要属性:value和key

作用:将方法返回值放入缓存中

它并不像@Cacheable一样,需要查是否存在缓存,它是直接设置缓存,一般是在新增或更新缓存的时候用到。

例子:

java 复制代码
@CachePut`(value = "goods-info", key = "#id")
public Goods update(Goods goods){
    goodsMapper.updateByPrimaryKeySelective(goods);
   	return goods;
}

@CacheEvict

它的一个重要属性:key,跟上面两个注解的key是一样的意思

作用:删除缓存

例子:

java 复制代码
@CacheEvict(value = "order-info", key = "#id")
public void delete(Long id){
    Goods goods = new Goods();
    goods.setId(id);
    goods.setDeleted(0);
    goodsMapper.updateByPrimaryKeySelective(goods);
}

@Caching

作用:可以通过 @Caching 注解组合多个注解策略在一个方法上.

这个也不难理解,比如说我们在一个方法里面,生成了订单的同时清空了购物车,订单是要缓存的,而购物车是需要清空的,这时是不是要一个组合?

此时我们可以在方法是加上这个注解

java 复制代码
@Caching(
    cacheable = {@Cacheable(value = "order-info", key = "#id")},
    evict = {@CacheEvict(value = "cart-info", key = "#id")}
)

总结

springboot 的内置缓存使用注解的方式非常简单,它是把数据保存在内存中,因此它的效率非常高,但它同样面临一个问题就是无法在分布式环境中使用。就如之前分享的那篇文章《mybatis的一级缓存和二级缓存》一样,如果存在多个节点,缓存更新的只是当前的节点而不是所有的节点。

相关推荐
碳苯几秒前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
Dylanioucn12 分钟前
【分布式微服务云原生】探索Redis:数据结构的艺术与科学
数据结构·redis·分布式·缓存·中间件
kylinxjd16 分钟前
spring boot发送邮件
java·spring boot·后端·发送email邮件
杨荧26 分钟前
【JAVA开源】基于Vue和SpringBoot的旅游管理系统
java·vue.js·spring boot·spring cloud·开源·旅游
2401_857439694 小时前
Spring Boot新闻推荐系统:用户体验优化
spring boot·后端·ux
进击的女IT4 小时前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端
杨半仙儿还未成仙儿6 小时前
Spring框架:Spring Core、Spring AOP、Spring MVC、Spring Boot、Spring Cloud等组件的基本原理及使用
spring boot·spring·mvc
一 乐6 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
IT学长编程8 小时前
计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·二手图书交易系统
艾伦~耶格尔8 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构