본문 바로가기

개인공부

Redis 기본 사용법

반응형

여러 서비스들에서 Redis를 많이 사용한다. 

(사용하는 이유는 In Memory Database이기 때문에 빠르다는 점, Disk 에 저장하므로 서버 장애시 대처가능, No SQL 여러장점)

 

기본적으로 Redis를 사용하기 위해서 Redis를 다운로드해야한다. Local에서 테스트하기위해서는 현재 피씨에 다운로드 해야한다. 

 

github.com/MicrosoftArchive/redis/releases

 

Releases · microsoftarchive/redis

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis

github.com

여기 접속해서 자신에 버전에 맞는 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서버를 두고 참조할 수 있다.

 

반응형

'개인공부' 카테고리의 다른 글

의미론적 태그  (0) 2020.12.21
caching  (0) 2020.11.15
HTTP 1.1 / HTTP 2.0  (0) 2020.11.02
MVC1 MVC2  (0) 2020.11.02
디자인 패턴  (0) 2020.10.27