728x90
build.gradle에 dependency 추가
//redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
application.properties
#Redis set
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.cache.type=redis
따로 캐시 기능을 사용할 것이므로 캐시 타입을 redis로 설정
Config 클래스 생성
config 패키지를 생성해서 config 클래스 생성
여기서 만든 config 클래스는 총 2개
RedisConfig.java
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
public final ObjectMapper objectMapper;
public RedisConfig(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){ //Redis Server 통신
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
@Bean
public RedisConnectionFactory redisConnectionFactory(){ //Redis Connection
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
redisStandaloneConfiguration.setPort(port);
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
}
Redis의 설정등을 빈등록을 한다.
CacheConfig.java
@Configuration
public class CacheConfig {
private final RedisConnectionFactory redisConnectionFactory;
private final ObjectMapper objectMapper;
public CacheConfig(RedisConnectionFactory redisConnectionFactory, ObjectMapper objectMapper) {
this.redisConnectionFactory = redisConnectionFactory;
this.objectMapper = objectMapper;
}
@Bean
public CacheManager redisCacheManger(){ //Bean 등록으로 인해 default인 로컬에 캐시를 저장하지 않고 redis에 저장함
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.entryTtl(Duration.ofSeconds(600)); //cache 유효시간 10분
RedisCacheManager redisCacheManager = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
.cacheDefaults(redisCacheConfiguration).build();
return redisCacheManager;
}
}
@EnableCaching 추가
@SpringBootApplication
@EnableCaching
public class JpaTest2Application {
public static void main(String[] args) {
SpringApplication.run(JpaTest2Application.class, args);
}
}
@Transactional(readOnly = true)
@Cacheable(key = "#params", value = "boardDetail")
@GetMapping("/board-detail")
public Map<String,BoardVO> boardDetail(@RequestParam Map<String,String>params){
Long bno = Long.parseLong(params.get("bno"));
Map<String,BoardVO> list = new HashMap<>();
list.put("list",boardService.findByBno(bno));
return list;
}
value(=cacheNames) 캐시의 이름, key 는 redis의 key값
redis에서 캐시 조회시 사용할 명령어에
get value::key
이렇게 검색하면 된다.
캐시 삭제
간단하다. 캐시를 삭제할 메소드 위에다가 @CacheEvict(value = "캐시이름", allEntries = true)라고 하면된다.
allEntries = true로 열어주면, 해당 key의 접두사로 시작하는 모든 key를 제거해준다. 만약 특정 캐시를 삭제하고 싶으면
allEntries가 아니라 key값을 넣어서 동일한 캐시를 삭제해 주면 된다.
*주의점
allEntries는 실제 프로젝트에서는 사용을 권장하지 않는다. 그 이유는 여기에서 확인하면 된다.
https://dev-racoon.tistory.com/36
728x90
'캐싱 > Redis' 카테고리의 다른 글
Redis란 (0) | 2022.06.05 |
---|---|
Redis(2) - Docker에 Redis 설치하기 (0) | 2022.01.12 |
Comment