spring-boot缓存测试

需求描述

对于频繁访问的数据,为了减少生成数据所需要的成本,我们有时需要对这些频繁访问的数据做缓存。对于数据缓存,有很多开源包可以实现,如EHCache ,JCache ,ShiftOne 等。以前做过缓存相关的东西,都是利用一些开源缓存工具,自己写一个单例类来实现定时缓存功能。这次测试,我们通过使用spring-boot中集成的缓存工具,利用注解方式实现数据缓存。经过测试后,发现spring-boot对缓存的支持已经十分完善,而且支持的缓存技术也很多。使用起来也非常方便。

实现

本次测试使用的是spring-boot中集成中谷歌的缓存技术:guava。

使用时只需要引入一些pom依赖,在启动类中增加一个@EnableCaching注解,然后在需要缓存的方法中加一个@Cacheable(“books”)注解即可。关于缓存时间和缓存大小,可以直接在application.yml中配置。

maven依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>

代码

@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }
}

controller层

    @RequestMapping(value = "/cache/test",method = RequestMethod.GET)
    @ApiOperation(value = "缓存测试",notes = "")
    public Book getBook(@RequestParam()String bookName){
        return bookCache.getBook(bookName);
    }

service层

@Service
public class BookCache {
    public static Integer index = 0;

    @Cacheable("books")
    public Book getBook(String bookName){
        index = index + 1;
        Book book = new Book(bookName,index);
        return book;
    }
}

在实体Book中,我们重写构造器,每次创建新的对象时,都会打印一下输出一条内容,方便我们测试

public class Book {

    public Book(String bookName,Integer index){
        System.out.println("创建一本书");
        this.bookName = bookName;
        this.createDate = new Date();
        this.index = index;
    }

    private String bookName;
    private Date createDate;
    private Integer index;

    public Integer getIndex() {
        return index;
    }

    public void setIndex(Integer index) {
        this.index = index;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

配置文件

spring:
  profiles:
    active: dev
  jackson:
    serialization-inclusion: NON_NULL
    date-format: yyyy-MM-dd'T'HH:mm:ss
    time-zone: Asia/Shanghai
  cache:
    guava:
      # 缓存名称
      cache-names: books
      #缓存最大数量500条, 缓存失效时间 10s
      spec: maximumSize=500,expireAfterWrite=5s

对于配置文件就不说太多了,都很明显了。cache-names: books要与方法上使用的那个name保持一致。

测试及总结

1、我们在controller中调用该请求,从第一次调用开始,前10s内容,只有一次输出“创建一本书”,10s以后,再调用,就会再次出现“创建一本书”。

2、配置文件中直接可以配置缓存时间,个人觉得比自己写要方便太多,再次膜拜一下大神们造的轮子。

3、测试相关代码下载地址

spring-boot缓存测试

需求描述

对于频繁访问的数据,为了减少生成数据所需要的成本,我们有时需要对这些频繁访问的数据做缓存。对于数据缓存,有很多开源包可以实现,如EHCache ,JCache ,ShiftOne 等。以前做过缓存相关的东西,都是利用一些开源缓存工具,自己写一个单例类来实现定时缓存功能。这次测试,我们通过使用spring-boot中集成的缓存工具,利用注解方式实现数据缓存。经过测试后,发现spring-boot对缓存的支持已经十分完善,而且支持的缓存技术也很多。使用起来也非常方便。

实现

本次测试使用的是spring-boot中集成中谷歌的缓存技术:guava。

使用时只需要引入一些pom依赖,在启动类中增加一个@EnableCaching注解,然后在需要缓存的方法中加一个@Cacheable(“books”)注解即可。关于缓存时间和缓存大小,可以直接在application.yml中配置。

maven依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
代码
@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }
}
    @RequestMapping(value = "/cache/test",method = RequestMethod.GET)
    @ApiOperation(value = "缓存测试",notes = "")
    public Book getBook(@RequestParam()String bookName){
        return bookCache.getBook(bookName);
    }

service层

@Service
public class BookCache {
    public static Integer index = 0;

    @Cacheable("books")
    public Book getBook(String bookName){
        index = index + 1;
        Book book = new Book(bookName,index);
        return book;
    }
}

在实体Book中,我们重写构造器,每次创建新的对象时,都会打印一下输出一条内容,方便我们测试

public class Book {

    public Book(String bookName,Integer index){
        System.out.println("创建一本书");
        this.bookName = bookName;
        this.createDate = new Date();
        this.index = index;
    }

    private String bookName;
    private Date createDate;
    private Integer index;

    public Integer getIndex() {
        return index;
    }

    public void setIndex(Integer index) {
        this.index = index;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

配置文件

spring:
  profiles:
    active: dev
  jackson:
    serialization-inclusion: NON_NULL
    date-format: yyyy-MM-dd'T'HH:mm:ss
    time-zone: Asia/Shanghai
  cache:
    guava:
      # 缓存名称
      cache-names: books
      #缓存最大数量500条, 缓存失效时间 10s
      spec: maximumSize=500,expireAfterWrite=5s

对于配置文件就不说太多了,都很明显了。cache-names: books要与方法上使用的那个name保持一致。

测试及总结

1、我们在controller中调用该请求,从第一次调用开始,前10s内容,只有一次输出“创建一本书”,10s以后,再调用,就会再次出现“创建一本书”。

2、配置文件中直接可以配置缓存时间,个人觉得比自己写要方便太多,再次膜拜一下大神们造的轮子。

3、测试相关代码下载地址
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
spring-boot-starter-jpa和spring-boot-starter-jdbc是Spring Boot框架中用于数据库访问的两个常用依赖库,它们在数据库访问方式和功能上有一些区别。 spring-boot-starter-jpa是基于Java Persistence API(JPA)的依赖库,它提供了一种面向对象的方式来进行数据库访问。JPA是Java EE的一部分,它定义了一套标准的API和规范,用于实现对象关系映射(ORM)。使用spring-boot-starter-jpa可以方便地进行实体类与数据库表之间的映射,通过简单的注解和配置,可以实现数据库的增删改查操作。同时,spring-boot-starter-jpa还提供了一些高级特性,如事务管理、缓存等。 相比之下,spring-boot-starter-jdbc是基于Java Database Connectivity(JDBC)的依赖库。JDBC是Java语言访问关系型数据库的标准API,它提供了一套用于执行SQL语句和处理结果集的方法。使用spring-boot-starter-jdbc可以直接使用JDBC API进行数据库操作,需要手动编写SQL语句和处理结果集。相对于JPA,JDBC更加底层,更加灵活,可以直接操作数据库的细节。 总结一下区别: 1. 数据库访问方式:spring-boot-starter-jpa使用面向对象的方式进行数据库访问,而spring-boot-starter-jdbc使用基于SQL的方式进行数据库访问。 2. 抽象程度:spring-boot-starter-jpa提供了更高级的抽象,通过注解和配置可以实现对象关系映射,而spring-boot-starter-jdbc需要手动编写SQL语句和处理结果集。 3. 功能特性:spring-boot-starter-jpa提供了一些高级特性,如事务管理、缓存等,而spring-boot-starter-jdbc相对较为简单,功能相对较少。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值