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

Spring Boot 缓存介绍 与 Spring Cache基本用法,第1张

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


目录
  • 🌟 一、Java缓存框架
  • 🌟 二、Spring Cache 用法
  • 🌟 三、@EnableCaching
  • 🌟 四、Spring Cache基本用法
    • 🌟🌟 4.1、Maven添加POM依赖
    • 🌟🌟 4.2、application.properties配置redis
    • 🌟🌟 4.3、配置实体类和业务类
    • 🌟🌟 4.4、单元测试
    • 🌟🌟 4.5、运行结果


🌟 一、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.bootgroupId>
            <artifactId>spring-boot-starter-cacheartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        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”,值就是方法返回的结果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/905665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存