Spring Boot 缓存介绍 与 Spring Cache基本用法

🎈博客主页:🌈我的主页🌈
🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏
🎈本文由 【泠青沼~】 原创,首发于 优快云🚩🚩🚩
🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页



🌟 一、Java缓存框架

  • EhCache

Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点

  • Spring Cache

它并不是具体的实现,而是一个对缓存的抽象

举个例子:

抽象(规范)具体实现
JDBCMYSQL驱动
Spring CacheEhCache
JPAHibernate

定义一个上层的规范,让所有的实现类都去实现规范,最如果实现类需要改变只需要改变实现类部分,核心的内部代码不需要改变,对于开发者来说就只需要实现规范的接口,更换依赖项就可以完成

🌟 二、Spring Cache 用法

  • @EnableCaching
  • @Cacheable
  • @CachePut
  • @CacheEvict
  • @Caching
  • @CacheConfig

🌟 三、@EnableCaching

在这里插入图片描述

boolean proxyTargetClass() default false;
//设置使用的代理方式,默认jdk的动态代理,如果为true就是cjlib的动态代理

🌟 四、Spring Cache基本用法

🌟🌟 4.1、Maven添加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>

🌟🌟 4.2、application.properties配置redis

spring.redis.host=127.0.0.1
spring.redis.port=6379

🌟🌟 4.3、配置实体类和业务类

实体类:

public class User implements Serializable {
    private String username;
    private Long id;

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", id=" + id +
                '}';
    }

业务类:

@Service
public class UserService {

    @Cacheable(cacheNames = "c1")//标记在方法上,表示该方法的返回结果需要缓存,
    // 默认是方法的参数作为redis缓存的key
    //触发缓存校验,若果缓存中没有,那就加入缓存,如果有直接取出来
    public User getUserByid(Long id){
        System.out.println("getUserByid:"+id);
        User user = new User();
        user.setId(id);
        user.setUsername("dong");
        return user;
    }
}

🌟🌟 4.4、单元测试

class CacheRedisApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        for (int i=0;i<3;i++){
            User u = userService.getUserByid(99L);
            System.out.println("u:"+u);
        }
    }

}

🌟🌟 4.5、运行结果

如果我们注释掉业务方法上的注解@Cacheable,结果:
在这里插入图片描述

方法被调用了三次,返回值没有被缓存

我们再重新加上业务方法上的注解@Cacheable,结果:

在这里插入图片描述

我们发现方法getUserByid()就只调用了一次,之后的调用只是从redis的缓存中读取数据,并且redis的键增加了@Cacheable中的参数“c1”,值就是方法返回的结果

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值