반응형
여러 서비스들에서 Redis를 많이 사용한다.
(사용하는 이유는 In Memory Database이기 때문에 빠르다는 점, Disk 에 저장하므로 서버 장애시 대처가능, No SQL 여러장점)
기본적으로 Redis를 사용하기 위해서 Redis를 다운로드해야한다. Local에서 테스트하기위해서는 현재 피씨에 다운로드 해야한다.
github.com/MicrosoftArchive/redis/releases
여기 접속해서 자신에 버전에 맞는 Redis를 다운로드하자.
의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
TestData.class (테스트 객체 생성)
package com.my.redis;
import java.io.Serializable;
public class TestData implements Serializable {
private static final long serialVersionUID = -7353484588260422449L;
private String testId;
private String testame;
public TestData() {
}
public TestData(String testId, String testame) {
super();
this.testId = testId;
this.testame = testame;
}
public String getTestId() {
return testId;
}
public void setTestId(String testId) {
this.testId = testId;
}
public String getTestame() {
return testame;
}
public void setTestame(String testame) {
this.testame = testame;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "TestData [testId=" + testId + ", testame=" + testame + "]";
}
}
RedisConfigulation 레디스 설정 하기
package com.my.redis;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfiguration {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(TestData.class));
return redisTemplate;
}
@Bean
MessageListenerAdapter messageListenerAdapter() {
return new MessageListenerAdapter(new RedisService());
}
@Bean
RedisMessageListenerContainer redisContainer() {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory());
container.addMessageListener(messageListenerAdapter(), topic());
return container;
}
@Bean
ChannelTopic topic() {
return new ChannelTopic("Event");
}
}
RedisTemplate의 설정같은 경우 TestData로 시리얼라이즈 해서 레디스 오브젝트에 저장할 수 있게해준다.
(설정안할경우 기본적이 타입들만 사용할 수 있다.)
RedisService
package com.my.redis;
import java.util.ArrayList;
import java.util.List;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Service;
@Service
public class RedisService implements MessageListener {
public static List<String> messageList = new ArrayList<String>();
@Override
public void onMessage(Message message, byte[] pattern) {
messageList.add(message.toString());
System.out.println("Message received: " + message.toString());
}
}
Redis는 Pub Sub기능도 제공한다 이때 들어오는 데이터를 다음과같이 응답할 수 있음.
Test URL Mapping
package com.my.redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DataService {
@Autowired
RedisTemplate<String, Object> redisTemplate;
@GetMapping
public String test() {
ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
TestData data = new TestData();
data.setTestId("1234566");
data.setTestame("HongGilDong");
valueOperations.set("key", data);
TestData data2 = (TestData) valueOperations.get("key");
return data2.getTestame();
}
}
이렇게 기본값을 설정하고 필요한 데이터셋을 이용하여 빠르게 접근 할 수있다.
현재는 로컬상태로 설정해놨으면 필요하다면 다른 IP서버를 두고 참조할 수 있다.
반응형