일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- api cache
- ann
- file download
- Analyzer
- IONQ
- Elastic
- Query
- request cache
- java
- Cache
- KNN
- NORI
- TSLA
- 아이온큐
- 양자컴퓨터
- elasticsearch cache
- aggs
- Elasticsearch
- java crawler
- dbeaver
- Docker
- Selenium
- mysql
- 테슬라
- API
- vavr
- JPA
- Aggregation
- redis
- aqqle
Archives
- Today
- Total
아빠는 개발자
[java] API - redis cache 본문
728x90
반응형
지난시간 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) {
자.. 테스트
API 평균 : 53.26 97456 |
API 평균 : 7.11 31056 |
API 평균 : 7.1 31056 |
뭐.. 당연히 예상했던 결과..
첫번째 테스트에서 country code 를 cache key로 데이터가 캐싱되었을것이고 두번째 테스트에서 redis 에 캐싱된 데이터를 사용하고 있있어 응답시간 7ms
다음 작업
redis 설정 다시하고
캐시 key를 어떻게 정의 할것인가..
728x90
반응형
'Java > API' 카테고리의 다른 글
[java] API Controller에서 데이터를 받아오는 방법 (1) | 2023.10.28 |
---|---|
[java] API - geo distance (0) | 2023.10.21 |
[java] API - 검색 api 성능 개선 final (0) | 2023.10.14 |
[java] API - redis cache for method (0) | 2023.10.13 |
[java] API - file system cache (request cache) (0) | 2023.10.07 |