Skip to content

Commit 42414ee

Browse files
committed
finish spring redis application
1 parent 43e6e9e commit 42414ee

10 files changed

+126
-8
lines changed

Diff for: README.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
# spring-redis-docker-example
1+
# spring-redis-docker-example
2+
3+
```
4+
./gradlew clean build
5+
6+
docker-compose build
7+
8+
docker-compose up
9+
```

Diff for: build.gradle

+2-4
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ repositories {
2121

2222
dependencies {
2323
compile 'com.google.guava:guava:21.0'
24-
compile("org.springframework.boot:spring-boot-starter-web") {
25-
exclude module: "spring-boot-starter-tomcat"
26-
}
27-
compile("org.springframework.boot:spring-boot-starter-jetty")
24+
compile("org.springframework.boot:spring-boot-starter-web")
25+
compile("org.springframework.boot:spring-boot-starter-data-redis")
2826
compile("org.springframework.boot:spring-boot-starter-actuator")
2927
testCompile("junit:junit")
3028
}

Diff for: redis/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This docker-compose.yml is for just docker up redis when doing development.

Diff for: redis/docker-compose.yml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
version: '2'
2+
services:
3+
db:
4+
image: "redis:alpine"
5+
hostname: redis
6+
ports:
7+
- "6379:6379"

Diff for: src/main/java/me/zeph/controller/UserController.java

+22-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
package me.zeph.controller;
22

33
import me.zeph.model.User;
4+
import me.zeph.service.UserService;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.http.ResponseEntity;
47
import org.springframework.web.bind.annotation.PathVariable;
8+
import org.springframework.web.bind.annotation.RequestBody;
59
import org.springframework.web.bind.annotation.RequestMapping;
610
import org.springframework.web.bind.annotation.RestController;
711

12+
import static org.springframework.http.HttpStatus.CREATED;
13+
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
14+
import static org.springframework.web.bind.annotation.RequestMethod.GET;
15+
import static org.springframework.web.bind.annotation.RequestMethod.POST;
16+
817
@RestController
918
public class UserController {
10-
@RequestMapping(value = "/user/{id}")
11-
public User findUserById(@PathVariable("id") String id) {
12-
return new User("1234567890");
19+
20+
@Autowired
21+
private UserService userService;
22+
23+
@RequestMapping(value = "/user/{phoneNumber}", method = GET, produces = APPLICATION_JSON_VALUE)
24+
public User findUserByPhoneNumber(@PathVariable("phoneNumber") String phoneNumber) {
25+
return userService.findUserByPhoneNumber(phoneNumber);
26+
}
27+
28+
@RequestMapping(value = "/user", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
29+
public ResponseEntity saveUser(@RequestBody User user) {
30+
userService.saveUser(user);
31+
return new ResponseEntity(CREATED);
1332
}
1433
}
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package me.zeph.converter;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import me.zeph.model.User;
5+
import org.springframework.core.convert.converter.Converter;
6+
import org.springframework.data.convert.ReadingConverter;
7+
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
8+
import org.springframework.stereotype.Component;
9+
10+
@Component
11+
@ReadingConverter
12+
public class BytesToUserConverter implements Converter<byte[], User> {
13+
14+
private final Jackson2JsonRedisSerializer<User> serializer;
15+
16+
public BytesToUserConverter() {
17+
serializer = new Jackson2JsonRedisSerializer<>(User.class);
18+
serializer.setObjectMapper(new ObjectMapper());
19+
}
20+
21+
@Override
22+
public User convert(byte[] value) {
23+
return serializer.deserialize(value);
24+
}
25+
}
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package me.zeph.converter;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import me.zeph.model.User;
5+
import org.springframework.core.convert.converter.Converter;
6+
import org.springframework.data.convert.WritingConverter;
7+
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
8+
import org.springframework.stereotype.Component;
9+
10+
@Component
11+
@WritingConverter
12+
public class UserToBytesConverter implements Converter<User, byte[]> {
13+
14+
private final Jackson2JsonRedisSerializer<User> serializer;
15+
16+
public UserToBytesConverter() {
17+
serializer = new Jackson2JsonRedisSerializer<>(User.class);
18+
serializer.setObjectMapper(new ObjectMapper());
19+
}
20+
21+
@Override
22+
public byte[] convert(User value) {
23+
return serializer.serialize(value);
24+
}
25+
}

Diff for: src/main/java/me/zeph/service/UserService.java

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package me.zeph.service;
2+
3+
import me.zeph.converter.BytesToUserConverter;
4+
import me.zeph.converter.UserToBytesConverter;
5+
import me.zeph.model.User;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.data.redis.core.HashOperations;
8+
import org.springframework.data.redis.core.RedisTemplate;
9+
import org.springframework.stereotype.Service;
10+
11+
@Service
12+
public class UserService {
13+
14+
@Autowired
15+
private RedisTemplate redisTemplate;
16+
17+
@Autowired
18+
private UserToBytesConverter userToBytesConverter;
19+
20+
@Autowired
21+
private BytesToUserConverter bytesToUserConverter;
22+
23+
public void saveUser(User user) {
24+
HashOperations hashOperations = redisTemplate.opsForHash();
25+
hashOperations.put("user", user.getPhoneNumber(), userToBytesConverter.convert(user));
26+
}
27+
28+
public User findUserByPhoneNumber(String phoneNumber) {
29+
HashOperations hashOperations = redisTemplate.opsForHash();
30+
return bytesToUserConverter.convert((byte[]) hashOperations.get("user", phoneNumber));
31+
}
32+
33+
}

Diff for: src/main/resources/application-dev.properties

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
spring.redis.host=localhost

Diff for: src/main/resources/application.properties

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
spring.redis.host=redis

0 commit comments

Comments
 (0)