Skip to content

Commit 9d27243

Browse files
committed
Add Redis configuration and dependencies
1 parent 337c06e commit 9d27243

File tree

5 files changed

+83
-3
lines changed

5 files changed

+83
-3
lines changed

pom.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,23 @@
102102

103103

104104

105+
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
106+
<dependency>
107+
<groupId>redis.clients</groupId>
108+
<artifactId>jedis</artifactId>
109+
<version>5.1.0</version>
110+
</dependency>
111+
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
112+
<dependency>
113+
<groupId>org.springframework.boot</groupId>
114+
<artifactId>spring-boot-starter-data-redis</artifactId>
115+
<version>3.2.4</version>
116+
</dependency>
117+
118+
119+
120+
121+
105122

106123

107124

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.programming.userService.config;
2+
3+
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
4+
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.data.redis.connection.RedisConnectionFactory;
8+
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
9+
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
10+
import org.springframework.data.redis.core.RedisTemplate;
11+
import org.springframework.data.redis.serializer.StringRedisSerializer;
12+
import org.springframework.beans.factory.annotation.Value;
13+
@Configuration
14+
@EnableRedisRepositories
15+
public class RedisConfig {
16+
17+
@Value("${spring.redis.host}")
18+
private String redisHost;
19+
20+
@Value("${spring.redis.port}")
21+
private int redisPort;
22+
23+
@Value("${spring.redis.password}")
24+
private String redisPassword;
25+
26+
@Bean
27+
public RedisConnectionFactory redisConnectionFactory() {
28+
RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
29+
redisConfig.setHostName(redisHost);
30+
redisConfig.setPort(redisPort);
31+
redisConfig.setPassword(redisPassword);
32+
33+
return new LettuceConnectionFactory(redisConfig);
34+
}
35+
36+
37+
@Bean
38+
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
39+
RedisTemplate<String, Object> template = new RedisTemplate<>();
40+
template.setConnectionFactory(connectionFactory);
41+
template.setKeySerializer(new StringRedisSerializer());
42+
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
43+
return template;
44+
}
45+
}

src/main/java/com/programming/userService/controller/UserController.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.nio.file.Path;
2424
import java.nio.file.Paths;
2525
import org.springframework.beans.factory.annotation.Autowired;
26+
import org.springframework.cache.annotation.Cacheable;
2627
import org.springframework.mail.MailException;
2728
import org.springframework.mail.SimpleMailMessage;
2829
import org.springframework.mail.javamail.JavaMailSender;
@@ -33,14 +34,17 @@
3334
import com.programming.userService.util.JwtUtil;
3435
import com.programming.userService.entity.CustomUserDetails;
3536
import com.programming.userService.entity.AuthUser;
37+
import org.springframework.data.redis.core.RedisTemplate;
38+
3639
@RestController
3740
@AllArgsConstructor
3841
@RequestMapping("/user")
3942
public class UserController {
4043

4144
private final AuthUserRepository userRepository;
4245
private final PasswordEncoder passwordEncoder;
43-
46+
private final RedisTemplate<String, Object> redisTemplate;
47+
private static final String USER_CACHE = "USER_CACHE";
4448
@Autowired
4549
private JwtUtil jwtUtil;
4650

@@ -164,10 +168,14 @@ public ResponseEntity listUserbyUsername(@RequestBody AuthUser user) {
164168
}
165169
}
166170

171+
@Cacheable(value = USER_CACHE, key = "#id")
167172
@GetMapping("/listUserbyId/{id}")
168173
public ResponseEntity listUserbyId(@PathVariable("id") String id) {
169174
try {
170-
return ResponseEntity.ok(userRepository.findById(id));
175+
AuthUser user = userRepository.findById(id).orElseThrow(() -> new Exception("User not found"));
176+
// Save user in Redis cache
177+
redisTemplate.opsForHash().put(USER_CACHE, id, user);
178+
return ResponseEntity.ok(user);
171179
} catch (Exception e) {
172180
return ResponseEntity.internalServerError().body(e.getMessage());
173181
}

src/main/java/com/programming/userService/entity/AuthUser.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
import org.springframework.data.mongodb.core.mapping.Document;
88

99
import java.util.Date;
10+
import java.io.Serializable;
1011

1112
@Data
1213
@Builder
1314
@Document("user")
14-
public class AuthUser {
15+
public class AuthUser implements Serializable {
1516
@Id
1617
private String id;
1718
@Indexed
@@ -24,4 +25,7 @@ public class AuthUser {
2425
private byte[] avatar;
2526
private String email;
2627
private Date timestamp;
28+
29+
30+
private static final long serialVersionUID = 1L;
2731
}

src/main/resources/application.properties

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,9 @@ [email protected]
1818
spring.mail.password=vkux umrv rtkd svsy
1919
spring.mail.properties.mail.smtp.auth=true
2020
spring.mail.properties.mail.smtp.starttls.enable=true
21+
22+
23+
# Redis
24+
spring.redis.host=localhost
25+
spring.redis.port=6379
26+
spring.redis.password=

0 commit comments

Comments
 (0)