Skip to content

Commit 6f4a334

Browse files
committed
add spring cache
1 parent 48dc043 commit 6f4a334

File tree

11 files changed

+141
-22
lines changed

11 files changed

+141
-22
lines changed

passjava-portal/src/views/modules/question/question-add-or-update.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ export default {
188188
this.$http({
189189
url: this.$http.adornUrl(
190190
`/question/v1/admin/question/${
191-
!this.dataForm.id ? "save" : "update"
191+
!this.dataForm.id ? "create" : "update"
192192
}`
193193
),
194194
method: "post",

passjava-question/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
<version>3.15.5</version>
3838
</dependency>
3939

40+
<dependency>
41+
<groupId>org.springframework.boot</groupId>
42+
<artifactId>spring-boot-starter-cache</artifactId>
43+
</dependency>
4044
<!--
4145
<dependency>
4246
<groupId>com.aliyun.oss</groupId>

passjava-question/src/main/java/com/jackson0714/passjava/question/PassjavaQuestionApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
import org.mybatis.spring.annotation.MapperScan;
44
import org.springframework.boot.SpringApplication;
55
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
import org.springframework.cache.annotation.EnableCaching;
67
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
78
import org.springframework.cloud.openfeign.EnableFeignClients;
89
import org.springframework.context.annotation.ComponentScan;
910

11+
@EnableCaching
1012
@EnableFeignClients(basePackages = "com.jackson0714.passjava.question.feign")
1113
@EnableDiscoveryClient
1214
@MapperScan("com.jackson0714.passjava.question.dao")
1315
@SpringBootApplication
1416
public class PassjavaQuestionApplication {
15-
1617
public static void main(String[] args) {
1718
SpringApplication.run(PassjavaQuestionApplication.class, args);
1819
}
19-
2020
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.jackson0714.passjava.question.config;
2+
3+
import org.redisson.api.redisnode.RedisSentinel;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.boot.autoconfigure.cache.CacheProperties;
6+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
7+
import org.springframework.cache.annotation.EnableCaching;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
10+
import org.springframework.data.redis.cache.RedisCacheConfiguration;
11+
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
12+
import org.springframework.data.redis.serializer.RedisSerializationContext;
13+
import org.springframework.data.redis.serializer.StringRedisSerializer;
14+
15+
/**
16+
* @Author: 公众号 | 悟空聊架构
17+
* @Date: 2021/6/25 15:27
18+
* @Site: www.passjava.cn
19+
* @Github: https://github.com/Jackson0714/PassJava-Platform
20+
*/
21+
22+
@EnableConfigurationProperties(CacheProperties.class)
23+
@Configuration
24+
@EnableCaching
25+
public class MyCacheConfig {
26+
27+
@Autowired
28+
CacheProperties cacheProperties;
29+
30+
@Bean
31+
RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
32+
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
33+
config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
34+
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
35+
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
36+
37+
if (redisProperties.getTimeToLive() != null) {
38+
config = config.entryTtl(redisProperties.getTimeToLive());
39+
}
40+
if (redisProperties.getKeyPrefix() != null) {
41+
config = config.prefixKeysWith(redisProperties.getKeyPrefix());
42+
}
43+
if (!redisProperties.isCacheNullValues()) {
44+
config = config.disableCachingNullValues();
45+
}
46+
if (!redisProperties.isUseKeyPrefix()) {
47+
config = config.disableKeyPrefix();
48+
}
49+
50+
return config;
51+
}
52+
}

passjava-question/src/main/java/com/jackson0714/passjava/question/config/MyRedissonConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public RedissonClient redisson() throws IOException {
2222
// 集群模式
2323
// config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001");
2424
// 2.根据 Config 创建出 RedissonClient 示例。
25-
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
25+
config.useSingleServer().setAddress("redis://192.168.56.10:6379");
2626
return Redisson.create(config);
2727
}
2828
}

passjava-question/src/main/java/com/jackson0714/passjava/question/controller/QuestionController.java

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.jackson0714.passjava.question.controller;
22

3-
import java.util.Arrays;
4-
import java.util.Map;
3+
import java.util.*;
54

65
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.cache.annotation.CacheEvict;
7+
import org.springframework.cache.annotation.CachePut;
8+
import org.springframework.cache.annotation.Cacheable;
79
import org.springframework.web.bind.annotation.PathVariable;
810
import org.springframework.web.bind.annotation.RequestBody;
911
import org.springframework.web.bind.annotation.RequestMapping;
@@ -24,11 +26,12 @@
2426
*
2527
*
2628
* @author jackson0714
27-
* @email jackson0585@163.com
29+
* @公众号:悟空聊架构
2830
* @date 2020-04-25 22:34:04
2931
*/
3032
@RestController
3133
@RequestMapping("question/v1/admin/question")
34+
3235
public class QuestionController {
3336
@Autowired
3437
private IQuestionService IQuestionService;
@@ -50,17 +53,31 @@ public R list(@RequestParam Map<String, Object> params){
5053
* 信息
5154
*/
5255
@RequestMapping("/info/{id}")
53-
//@RequiresPermissions("question:question:info")
56+
@Cacheable({"hot"})
5457
public R info(@PathVariable("id") Long id) {
55-
QuestionEntity question = IQuestionService.getById(id);
58+
QuestionEntity question = IQuestionService.info(id);
5659
return R.ok().put("question", question);
5760
}
5861

62+
/**
63+
* 测试方法的返回结果是否被缓存了
64+
*/
65+
@RequestMapping("/test")
66+
@Cacheable(value = "hot", key = "#root.method.name")
67+
public int test() {
68+
return 222;
69+
}
70+
71+
@RequestMapping("/test2")
72+
@Cacheable(value = "hot", key = "#root.method.name")
73+
public int test2() {
74+
return 456;
75+
}
76+
5977
/**
6078
* 保存
6179
*/
6280
@RequestMapping("/save")
63-
//@RequiresPermissions("question:question:save")
6481
public R save(@Valid @RequestBody QuestionEntity question){
6582
IQuestionService.saveQuestion(question);
6683

@@ -82,22 +99,32 @@ public R update(@RequestBody QuestionEntity question){
8299
* 删除
83100
*/
84101
@RequestMapping("/delete")
85-
//@RequiresPermissions("question:question:delete")
102+
@CacheEvict(value = "hot")
86103
public R delete(@RequestBody Long[] ids){
87104
IQuestionService.removeByIds(Arrays.asList(ids));
88-
89105
return R.ok();
90106
}
91107

92-
/**
93-
* 测试
94-
* @return
95-
*/
96-
@RequestMapping("/test")
97-
//@RequiresPermissions("question:question:delete")
98-
public String test(){
108+
@RequestMapping("/create")
109+
@CachePut(value = "hot", key = "#result.id")
110+
// mock create
111+
public QuestionEntity create(@Valid @RequestBody QuestionEntity question){
112+
return IQuestionService.createQuestion(question);
113+
}
99114

100-
return "test";
115+
@RequestMapping("/remove/{id}")
116+
@CacheEvict(value = "hot")
117+
public R remove(@PathVariable("id") Long id){
118+
IQuestionService.removeById(id);
119+
return R.ok();
101120
}
102121

122+
@RequestMapping("/condition/{id}")
123+
@Cacheable(value = "hot", unless = "#result.message.containss('NoCache')")
124+
public R condition(@PathVariable("id") Long id) {
125+
QuestionEntity question = IQuestionService.info(id);
126+
HashMap<String, Object> map = new HashMap<String, Object>();
127+
128+
return R.ok().put("question", question).put("message", "NoCache");
129+
}
103130
}

passjava-question/src/main/java/com/jackson0714/passjava/question/feign/SearchFeignService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.jackson0714.common.to.es.QuestionEsModel;
44
import com.jackson0714.common.utils.R;
55
import org.apache.ibatis.annotations.Mapper;
6+
import org.springframework.cloud.openfeign.EnableFeignClients;
67
import org.springframework.cloud.openfeign.FeignClient;
8+
import org.springframework.stereotype.Service;
79
import org.springframework.web.bind.annotation.PostMapping;
810
import org.springframework.web.bind.annotation.RequestBody;
911

passjava-question/src/main/java/com/jackson0714/passjava/question/service/IQuestionService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.baomidou.mybatisplus.extension.service.IService;
44
import com.jackson0714.common.utils.PageUtils;
5+
import com.jackson0714.common.utils.R;
56
import com.jackson0714.passjava.question.entity.QuestionEntity;
7+
import org.springframework.web.bind.annotation.PathVariable;
68

79
import java.util.Map;
810

@@ -17,8 +19,12 @@ public interface IQuestionService extends IService<QuestionEntity> {
1719

1820
PageUtils queryPage(Map<String, Object> params);
1921

22+
QuestionEntity info(Long id);
23+
2024
boolean saveQuestion(QuestionEntity question);
2125

2226
boolean updateQuestion(QuestionEntity question);
27+
28+
QuestionEntity createQuestion(QuestionEntity question);
2329
}
2430

passjava-question/src/main/java/com/jackson0714/passjava/question/service/impl/QuestionServiceImpl.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jackson0714.passjava.question.service.impl;
22

3+
import com.alibaba.fastjson.JSONObject;
34
import com.jackson0714.common.to.es.QuestionEsModel;
45
import com.jackson0714.common.utils.R;
56
import com.jackson0714.passjava.question.entity.TypeEntity;
@@ -8,6 +9,7 @@
89
import org.apache.commons.lang.StringUtils;
910
import org.springframework.beans.BeanUtils;
1011
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.cache.annotation.Cacheable;
1113
import org.springframework.stereotype.Service;
1214
import java.util.Map;
1315
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -51,6 +53,12 @@ public PageUtils queryPage(Map<String, Object> params) {
5153
return new PageUtils(page);
5254
}
5355

56+
@Override
57+
@Cacheable({"question", "hot"})
58+
public QuestionEntity info(Long id) {
59+
return getById(id);
60+
}
61+
5462
@Override
5563
public boolean saveQuestion(QuestionEntity question) {
5664
boolean saveResult = save(question);
@@ -67,6 +75,13 @@ public boolean updateQuestion(QuestionEntity question) {
6775
return true;
6876
}
6977

78+
@Override
79+
public QuestionEntity createQuestion(QuestionEntity question) {
80+
// Mock 返回 id
81+
question.setId(123L);
82+
return question;
83+
}
84+
7085
private boolean saveEs(QuestionEntity question) {
7186
// 1.创建 ES model
7287
QuestionEsModel esModel = new QuestionEsModel();

passjava-question/src/main/resources/application.properties

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,17 @@ spring.zipkin.discovery-client-enabled=false
88
# \u8BBE\u7F6E\u4F7F\u7528 http \u7684\u65B9\u5F0F\u4F20\u8F93\u6570\u636E\uFF0C\u4E5F\u53EF\u4EE5\u7528 RabbitMQ \u6216 Kafka\u3002
99
spring.zipkin.sender.type=web
1010
# \u8BBE\u7F6E\u91C7\u6837\u7387\u4E3A 100 %\uFF0C\u9ED8\u8BA4\u4E3A 0.1\uFF0810%\uFF09
11-
spring.sleuth.sampler.probability=1
11+
spring.sleuth.sampler.probability=1
12+
13+
# \u4F7F\u7528 Redis \u4F5C\u4E3A\u7F13\u5B58\u7EC4\u4EF6
14+
spring.cache.type=redis
15+
# \u7F13\u5B58\u8FC7\u671F\u65F6\u95F4\u4E3A 3600s
16+
spring.cache.redis.time-to-live=3600000
17+
# \u7F13\u5B58\u7684\u952E\u7684\u540D\u5B57\u524D\u7F00
18+
spring.cache.redis.key-prefix=passjava_
19+
# \u662F\u5426\u4F7F\u7528\u7F13\u5B58\u524D\u7F00
20+
spring.cache.redis.use-key-prefix=true
21+
# \u662F\u5426\u7F13\u5B58\u63A7\u5236\uFF0C\u9632\u6B62\u7F13\u5B58\u7A7F\u900F
22+
spring.cache.redis.cache-null-values=true
23+
24+

0 commit comments

Comments
 (0)