Cache
- 한번 읽어온 데이터를 임의의 공간에 저장하여 다시 읽어올 때 빠르게 결과값을 받을 수 있도록 도와주는 공간이다.
- 즉 같은 요청이 여러 번 들어와도 매번 데이터베이스를 거치는 것이 아닌 캐시 서버에서 첫 번째 요청 이후 저장된 결과값을 바로 내려주기 때문에 데이터베이스의 부하를 줄이고 서비스 속도도 느려지지 않는 장점이 있다.
Write Back Pattern?
Insert Query를 한번씩 많이 날리는 것보다 Insert Query 여러개를 붙여 한번에 날리는 것이 더 효율적인 원리이다.
때문에 들어오는 데이터들이 저장되기 전 메모리 공간에 머무르는 동안 서버에 장애가 발생하여 다운된다면 데이터가 손실될 수도 있다.
docker pull redis
docker ps
docker exec -it [CONTAINER ID] redis-cli
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
RedisConfig.java
import org.springframework.beans.factory.annotation.Value;
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.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Bean
public RedisConnectionFactory redisConnectionFactory(){
RedisStandaloneConfiguration redisStandaloneConfiguration
= new RedisStandaloneConfiguration(redisHost,redisPort);
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public <T> RedisTemplate<String, T> redisTemplate(){
RedisTemplate<String, T> redisTemplate = new RedisTemplate<>();
//아래 메서드들이 빠지면 스프링에서 조회할 땐,
//값이 정상으로 보이나 redis-cli로 보면 값이 이상하게 나온다.
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
배포된 프로젝트에 레디스를 추가하기때문에 도커로 설치하신건가요? 현재 저는 로컬환경에서 레디스 도입을 연습중인데 저같은 경우에는 brew를 활용해서 로컬에 설치 후 테스트 해도 되는건가요??