스프링부트 Redis 연습 1 - get/set 구현
스프링부트에서 Redis를 연동하는 연습용 프로젝트를 만들어 보겠습니다!
Redis 기본 이론
깃헙에 있는 정리본을 참고해주세요!
https://github.com/namusik/TIL-SampleProject/tree/main/Redis
Redis window 설치 및 실행
https://oingdaddy.tistory.com/225
Redis 서버를 킨 상태에서 코드를 작성해봅시다!
소스코드
https://github.com/namusik/TIL-SampleProject/tree/main/Redis/Redis%20get-set%20%EC%98%88%EC%A0%9C
작업환경
IntelliJ
Spring-boot
java 11
gradle
dependency
Lombok
spring web
spring data redis
application.yml
spring:
redis:
host: localhost
port: 6379
autoConfiguration 덕분에 서버주소:포트번호만 적어줘도 StringRedisTemplate과 redisConnectionFactory는 자동 생성된다
ChatMessage Model
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class ChatMessage {
private String sender;
private String context;
}
메세지 모델 클래스
보내는사람과 내용을 필드로 가지고 있음.
RedisConfig
@Configuration
public class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory();
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(ChatMessage.class));
return redisTemplate;
}
}
Json 형식으로 객체를 Value에 저장시키기 때문에 valueSerializer를 Jackson으로 미리 설정해놓은 RedisTemplate을 만들어 준다.
StringRedisTemplate은 따로 Bean으로 안만들어도 쓸 수 있음.
RedisService
@Service
@RequiredArgsConstructor
public class RedisService {
private final StringRedisTemplate stringRedisTemplate;
public void setRedisStringValue(ChatMessage chatMessage) {
ValueOperations<String, String> stringValueOperations = stringRedisTemplate.opsForValue();
stringValueOperations.set("sender", chatMessage.getSender());
stringValueOperations.set("context", chatMessage.getContext());
}
public void getRedisStringValue(String key) {
ValueOperations<String, String> stringValueOperations = stringRedisTemplate.opsForValue();
System.out.println(key +" : " + stringValueOperations.get(key));
}
}
public void setRedisValue(ChatMessage chatMessage) {
ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
String key = chatMessage.getSender();
valueOperations.set(key, chatMessage);
}
public void getRedisValue(String key) {
ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
ChatMessage chatMessage = (ChatMessage) valueOperations.get(key);
System.out.println("sender = " + chatMessage.getSender());
System.out.println("context = " + chatMessage.getContext());
}
Redis 서비스클래스
RedisTemplate<String, Object>는 get/set을 위한 객체.
template에서 valueOperation객체를 받아 사용함.
스프링부트에서는 아래의 redisTemplate이 자동생성되는데,
@Autowired RedisTemplate redisTemplate;
@Autowired StringRedisTemplate stringRedisTemplate;
@Autowired ReactiveRedisTemplate reactiveRedisTemplate;
@Autowired ReactiveStringRedisTemplate reactiveStringRedisTemplate;
redisTemplate 과 stringRedsiTemplate는 직렬화에 차이가 있음
stringRedisTemplate은 문자열에 특화된 template제공. 대부분 레디스 key-value는 문자열 위주기 때문에.
redisTemplate은 자바 객체를 redis에 저장하려고 할 때 사용하면 됨.
setRedisStringValue(ChatMessage chatMessage)를 통해 전달받은 메시지객체를 각각 redis에 set해줌.
getRedisStringValue(Strin key)통해 제대로 저장이 되었는지 출력해봄.
setRedisValue(ChatMessage chatmessage) 는 redisTemplate을 사용해서 value에 자바 객체 자체를 저장시킴
RedisController
@RestController
@RequiredArgsConstructor
public class RedisController {
public final RedisService redisService;
@PostMapping("api/redisStringTest")
public String send(@RequestBody ChatMessage chatMessage) {
redisService.setRedisStringValue(chatMessage);
redisService.getRedisStringValue("sender");
redisService.getRedisStringValue("context");
return "success";
}
@PostMapping("api/redisTest")
public String send(@RequestBody ChatMessage chatMessage) {
redisService.setRedisValue(chatMessage);
String key = chatMessage.getSender();
redisService.getRedisValue(key);
return "success";
}
}
RedisService를 생성자 의존성주입으로 가져와서 JSON형태로 객체를 전달받으면 set/get을 한번에 실행시켜서 최종적으로 출력시켜보는 Controller.
두 방식 모두 같은 결과로 나옴
실행결과
Postman을 사용해서 api를 실행시키면
성공시 "success"를 반환하고
저장해준 ChatMessage의 sender와 context가 제대로 출력되면 성공
참고
https://victorydntmd.tistory.com/348
https://oingdaddy.tistory.com/308
https://jeong-pro.tistory.com/175
https://bcp0109.tistory.com/328
Author And Source
이 문제에 관하여(스프링부트 Redis 연습 1 - get/set 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rainbowweb/스프링부트-Redis-연습-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)