ehcache缓存测试

springboot项目。tomcat的连接池最大线程数目设置为10。用Jeter做测试,一轮并发100个请求。springboot里面的Controller会请求一个service的方法,该service中有一个打印输出。同时该service上进行了

ehcache缓存注解。那么请问service中的打印输出会打印几次?这几次打印时间节点有什么特征?

pom.xml的maven引入:

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.10.6</version>
</dependency>

这是ehcache.xml配置文件。贴在classpath目录

<?xml version="1.0" encoding="UTF-8"?> <ehcache updateCheck="false" dynamicConfig="false"> <diskStore path="java.io.tmpdir"/> <cache name="users" timeToLiveSeconds="300" maxBytesLocalHeap="50M"/> </ehcache>


application.properties配置文件部分信息,引入ehcache.xml文件。同时配置tomcat的线程池最大线程数为10。
server.tomcat.threads.max=10

spring.cache.ehcache.config=classpath:ehcache.xml

Controller代码如下:

//Contoller代码:
@RestController
@Slf4j
public class QuickStartController {
@Autowired
IStudentService studentService;
@RequestMapping("/jsontest")
@ResponseBody
public String jsontest() {
    long startTime=System.currentTimeMillis();
    String name=studentService.getStudentName(1L);
    log.info("jsontest cost time"+(System.currentTimeMillis()-startTime));
    return name;
}
}

Service代码。IStudentService自己加一下。

@Service
@Slf4j
public class StudentServiceImpl implements IStudentService {
    @Override
    @Cacheable(cacheNames = "users",key = "#studentId")
    public String getStudentName(long studentId) {
        log.info("请求命中数据库了");
//本来做了一个数据库查询,我这里先注释掉。 studentDao.queryById(studentId);
        return "name";
    }
}

Jmeter测试请求http://127.0.0.1:8080/jsontest 

设置并发一次,一次100个线程。请求Controller中的/jsontest方法。

Idea控制台打印如下:大家主要看打印结果和时间。

2021-05-13 09:28:56.224  INFO 6088 --- [http-nio-8080-exec-9] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.224  INFO 6088 --- [http-nio-8080-exec-8] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.225  INFO 6088 --- [http-nio-8080-exec-3] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.225  INFO 6088 --- [http-nio-8080-exec-7] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.225  INFO 6088 --- [http-nio-8080-exec-1] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.225  INFO 6088 --- [http-nio-8080-exec-10] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.225  INFO 6088 --- [http-nio-8080-exec-4] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.225  INFO 6088 --- [http-nio-8080-exec-6] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.226  INFO 6088 --- [http-nio-8080-exec-5] com.service.StudentServiceImpl           : 请求命中数据库了
2021-05-13 09:28:56.226  INFO 6088 --- [http-nio-8080-exec-2] com.service.StudentServiceImpl           : 请求命中数据库了

2021-05-13 09:28:56.248  INFO 6088 --- [http-nio-8080-exec-3] com.QuickStartController                 : jsontest cost time55
2021-05-13 09:28:56.248  INFO 6088 --- [http-nio-8080-exec-2] com.QuickStartController                 : jsontest cost time55
2021-05-13 09:28:56.248  INFO 6088 --- [http-nio-8080-exec-6] com.QuickStartController                 : jsontest cost time55
2021-05-13 09:28:56.248  INFO 6088 --- [http-nio-8080-exec-1] com.QuickStartController                 : jsontest cost time55
2021-05-13 09:28:56.249  INFO 6088 --- [http-nio-8080-exec-5] com.QuickStartController                 : jsontest cost time56
2021-05-13 09:28:56.248  INFO 6088 --- [http-nio-8080-exec-10] com.QuickStartController                 : jsontest cost time50
2021-05-13 09:28:56.248  INFO 6088 --- [http-nio-8080-exec-4] com.QuickStartController                 : jsontest cost time55
2021-05-13 09:28:56.249  INFO 6088 --- [http-nio-8080-exec-7] com.QuickStartController                 : jsontest cost time56
2021-05-13 09:28:56.249  INFO 6088 --- [http-nio-8080-exec-8] com.QuickStartController                 : jsontest cost time56
2021-05-13 09:28:56.248  INFO 6088 --- [http-nio-8080-exec-9] com.QuickStartController                 : jsontest cost time55

2021-05-13 09:28:56.285  INFO 6088 --- [http-nio-8080-exec-10] com.QuickStartController                 : jsontest cost time1
2021-05-13 09:28:56.285  INFO 6088 --- [http-nio-8080-exec-4] com.QuickStartController                 : jsontest cost time0
2021-05-13 09:28:56.285  INFO 6088 --- [http-nio-8080-exec-9] com.QuickStartController                 : jsontest cost time0
2021-05-13 09:28:56.284  INFO 6088 --- [http-nio-8080-exec-1] com.QuickStartController                 : jsontest cost time0
2021-05-13 09:28:56.288  INFO 6088 --- [http-nio-8080-exec-6] com.QuickStartController                 : jsontest cost time1
2021-05-13 09:28:56.292  INFO 6088 --- [http-nio-8080-exec-2] com.QuickStartController                 : jsontest cost time3
2021-05-13 09:28:56.293  INFO 6088 --- [http-nio-8080-exec-8] com.QuickStartController                 : jsontest cost time2
2021-05-13 09:28:56.295  INFO 6088 --- [http-nio-8080-exec-3] com.QuickStartController                 : jsontest cost time1
2021-05-13 09:28:56.297  INFO 6088 --- [http-nio-8080-exec-7] com.QuickStartController                 : jsontest cost time0
2021-05-13 09:28:56.298  INFO 6088 --- [http-nio-8080-exec-1] com.QuickStartController                 : jsontest cost time0
2021-05-13 09:28:56.306  INFO 6088 --- [http-nio-8080-exec-9] com.QuickStartController                 : jsontest cost time0

。。。后续不贴了

 

解释如下:

tomcat的请求处理,线程池。本质就是一个线程池。server.tomcat.threads.max=10决定了该tomcat的线程池最多只能开10个线程处理请求。

http-nio-8080-exec-1到http-nio-8080-exec-10为线程组中的线程号。很清晰。

一次请求最多处理数为10,Jmeter测试工具的并发让最开始的10个请求都没有命中缓存,同时查库,这里查库代码我省略了。后续90个请求再次进来,大家可以看到service直接查询缓存返回了。并没有跑业务逻辑。

如果10个并发进来,只允许一个请求走业务,其余9个请求等待缓存写入后,再查缓存,怎么弄?走google的guava缓存机制。

电商抢茅台设计。给你一台PC机。用springboot或者ssm框架开发,用 jmeter模拟每秒1000请求,茅台只有100件库存。这里面还要用到流控。

缓存分级,本地缓存可以用ehcache或者guava包下缓存,上层可以用redis或者其他缓存,最后再访问DB,目前来看也是比较经典流行的策略了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值