使用Spring Cache简化使用Redis缓存

一、Spring Cache简介

Spring Cache是一个框架,实现了基于注解的缓存功能,;只需要简单地加一个注解,就能实现缓存功能。

Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis

 二、常用注解

@EnableCaching        开启缓存注解功能,通常加在启动类上

@Cacheable                在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数;如果没有缓存数据,调用方法并将方法返回值放到缓存中

@CachePut                将方法的返回值放到缓存中

@CacheEvict                将一条或多条数据从缓存中删除

三、案例 

这里会用到Redis、mysql、mybatis、spring cache所以我们先在pom文件中导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>

 

记得在配置文件中将数据库、Redis连接好。

 

在使用Spring Cache时,需要在应用程序的启动类上添加开启缓存注解功能的注解,这是因为Spring Cache是一个基于注解的缓存框架,需要在应用程序启动时开启对这些注解的支持,以使缓存功能正常工作。

 

1、@CachePut

添加  @CachePut  注解,虽然像途中有好几种格式,但一般还是使用第一种就好。

将光标移动到  @CachePut  注解上,然后  Ctrl  +  B   

 

点击下载

 

这段文本介绍的是在Spring框架中使用SpEL(Spring Expression Language)表达式来动态计算缓存存储操作的键值。默认情况下,所有方法参数都被视为键值,除非设置了自定义的键生成器。SpEL表达式在一个专用的上下文中进行评估,该上下文提供了以下元数据:  - #result:指向方法调用的结果的引用。对于支持的包装器(如Optional),#result 指向实际对象,而不是包装器。 - #root.method、#root.target 和 #root.caches:分别指向方法、目标对象和受影响的缓存的引用。 - 简短的methodName 和 targetClass 快捷方式也 available。  可以通过索引访问方法参数。例如,可以通过 #root.args[1]、#p1 或 #a1 访问第二个参数。如果参数的名称可用,则也可以通过名称访问参数。

 

这里通过Swagger进行调式 

 

这时数据会存储到数据库,并且会缓存到Redis

 

2、@Cacheable

通过接口传递来的一个值进行返回返回数据

 

通过Swagger调试

 

可以发现控制台中并没有调用数据库中的数据,而是调用的缓存中的数据。

(如果缓存中没有数据,那就会调用数据库中的数据,并将查找到得值放到缓存中)

 

3、@CacheEvict 

 

通过Swagger调用

 

数据库中id为2的数据没了

 

 同时缓存中  userCache::3  的数据也没了 

最后如何批量删除缓存/数据库中的数据:

@CacheEvict(cacheNames = "userCache", allEntries = true)

执行后,此时数据库和缓存中的数据都没了~~~

 

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学CAD的河狸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值