Skip to content

Commit 025aea7

Browse files
author
朱晔
committed
补充
1 parent e730727 commit 025aea7

File tree

4 files changed

+52
-16
lines changed

4 files changed

+52
-16
lines changed

src/main/java/org/geekbang/time/commonmistakes/cachedesign/redistransaction/CommonMistakesApplication.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,27 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.data.redis.connection.RedisConnectionFactory;
7+
import org.springframework.data.redis.core.StringRedisTemplate;
58

69
@SpringBootApplication
710
public class CommonMistakesApplication {
811

912
public static void main(String[] args) {
1013
SpringApplication.run(CommonMistakesApplication.class, args);
1114
}
15+
16+
@Bean
17+
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
18+
return new StringRedisTemplate(redisConnectionFactory);
19+
}
20+
21+
@Bean
22+
public StringRedisTemplate stringRedisTemplateTran(RedisConnectionFactory redisConnectionFactory) {
23+
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(redisConnectionFactory);
24+
stringRedisTemplate.setEnableTransactionSupport(true);
25+
return stringRedisTemplate;
26+
}
1227
}
1328

src/main/java/org/geekbang/time/commonmistakes/cachedesign/redistransaction/RedisTemplateTransactionController.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,27 @@
1010
@RequestMapping("redistemplatetransaction")
1111
@RestController
1212
public class RedisTemplateTransactionController {
13-
;
1413

1514
@Autowired
1615
private TestService testService;
1716

1817
@GetMapping("test1")
19-
public Long test1() {
20-
return testService.test1();
18+
public String test1() {
19+
return testService.multiTest();
2120
}
2221

2322
@GetMapping("test2")
24-
public Long test2() {
25-
return testService.test2();
23+
public String test2() {
24+
return testService.noMultiTest();
2625
}
2726

2827
@GetMapping("test3")
29-
public Long test3() {
30-
return testService.test3();
28+
public String test3() {
29+
return testService.redisTemplateInTransactional();
30+
}
31+
32+
@GetMapping("test4")
33+
public String test4() {
34+
return testService.multiTestInTransactional();
3135
}
3236
}

src/main/java/org/geekbang/time/commonmistakes/cachedesign/redistransaction/TestService.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,44 @@
1515
import java.lang.reflect.Field;
1616
import java.util.concurrent.Executors;
1717
import java.util.concurrent.TimeUnit;
18+
import java.util.stream.IntStream;
1819

1920
@Component
2021
@Slf4j
2122
public class TestService {
2223
@Autowired
2324
private StringRedisTemplate stringRedisTemplate;
2425
@Autowired
26+
private StringRedisTemplate stringRedisTemplateTran;
27+
@Autowired
2528
private RedisConnectionFactory redisConnectionFactory;
2629

27-
public Long test1() {
28-
return stringRedisTemplate.opsForValue().increment("test", 1);
30+
public String multiTest() {
31+
Long current = System.currentTimeMillis();
32+
stringRedisTemplateTran.multi();
33+
IntStream.rangeClosed(1, 1000).forEach(i -> stringRedisTemplateTran.opsForValue().increment("test", 1));
34+
stringRedisTemplateTran.exec();
35+
return System.currentTimeMillis() - current + "ms " + stringRedisTemplateTran.opsForValue().get("test");
36+
}
37+
38+
public String noMultiTest() {
39+
Long current = System.currentTimeMillis();
40+
IntStream.rangeClosed(1, 1000).forEach(i -> stringRedisTemplate.opsForValue().increment("test", 1));
41+
return System.currentTimeMillis() - current + "ms " + stringRedisTemplate.opsForValue().get("test");
2942
}
3043

31-
public Long test2() {
32-
stringRedisTemplate.setEnableTransactionSupport(true);
33-
return stringRedisTemplate.opsForValue().increment("test", 1);
44+
@Transactional
45+
public String redisTemplateInTransactional() {
46+
return "" + stringRedisTemplateTran.opsForValue().increment("test", 1);
3447
}
3548

3649
@Transactional
37-
public Long test3() {
38-
stringRedisTemplate.setEnableTransactionSupport(true);
39-
return stringRedisTemplate.opsForValue().increment("test", 1);
50+
public String multiTestInTransactional() {
51+
Long current = System.currentTimeMillis();
52+
stringRedisTemplateTran.multi();
53+
IntStream.rangeClosed(1, 1000).forEach(i -> stringRedisTemplateTran.opsForValue().increment("test", 1));
54+
stringRedisTemplateTran.exec();
55+
return System.currentTimeMillis() - current + "ms " + stringRedisTemplate.opsForValue().get("test");
4056
}
4157

4258
@PostConstruct

src/main/resources/application.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
server.port=45678
2-
server.tomcat.max-threads=50
2+
#server.tomcat.min-spare-threads=15
3+
server.tomcat.max-threads=30
34
spring.jpa.show-sql=false
45
spring.jpa.hibernate.ddl-auto=update
56
logging.level.ROOT=INFO

0 commit comments

Comments
 (0)