일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- MySQL
- sort
- aggs
- API
- flask
- 900gle
- 파이썬
- 차트
- Python
- Mac
- Test
- License
- TensorFlow
- zip 암호화
- aggregation
- plugin
- docker
- analyzer test
- ELASTIC
- Elasticsearch
- query
- licence delete curl
- high level client
- Java
- token filter test
- springboot
- Kafka
- matplotlib
- zip 파일 암호화
- license delete
Archives
- Today
- Total
개발잡부
[java] API - redis cache 본문
반응형
지난시간 elasticsearch 의 file system cache 를 사용해서 성능을 올려보았는데
https://father-lys.tistory.com/40
캐싱하면 redis 니까 함 넣어보잣
우선 redis 설치
https://father-lys.tistory.com/41
그리고
aqqle api 에 redis 설정
1. build.gradle 에 dependencies 추가
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
2. RedisConfig 생성
package com.doo.aqqle.config;
import com.doo.aqqle.common.CacheKey;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.CacheKeyPrefix;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
@RequiredArgsConstructor
@EnableCaching
@Configuration
public class RedisConfig {
@Bean(name = "cacheManager")
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
.entryTtl(Duration.ofSeconds(CacheKey.DEFAULT_EXPIRE_SEC))
.computePrefixWith(CacheKeyPrefix.simple())
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
cacheConfigurations.put(CacheKey.LOCATION, RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(CacheKey.DEFAULT_EXPIRE_SEC)));
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(connectionFactory).cacheDefaults(configuration)
.withInitialCacheConfigurations(cacheConfigurations).build();
}
}
3. 캐시 key 정보
package com.doo.aqqle.common;
public class CacheKey {
public static final int DEFAULT_EXPIRE_SEC = 60; // 1 minutes
public static final String LOCATION = "location";
}
3. response model 직렬화
package com.doo.aqqle.model;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
@Getter
@Setter
public class ListResult<T> extends CommonResult implements Serializable {
private List<T> list;
}
4. 데이터를 처리하는 메소드 캐싱
@Cacheable(value = CacheKey.LOCATION, key = "#countryCode", unless = "#result == null")
public CommonResult getLocations(String countryCode) {
자.. 테스트
뭐.. 당연히 예상했던 결과..
첫번째 테스트에서 country code 를 cache key로 데이터가 캐싱되었을것이고 두번째 테스트에서 redis 에 캐싱된 데이터를 사용하고 있있어 응답시간 7ms
다음 작업
redis 설정 다시하고
캐시 key를 어떻게 정의 할것인가..
반응형
'JAVA > springboot' 카테고리의 다른 글
[java] API - 검색 api 성능 개선 final (2) | 2023.10.15 |
---|---|
[java] API - cache method (0) | 2023.10.15 |
[java] API - file system cache (request cache) (0) | 2023.10.09 |
[springboot] springboot kafka 연동하기 (0) | 2022.10.22 |
[springboot] 엑셀 (0) | 2022.02.21 |
Comments