Skip to content

Commit 4c8af90

Browse files
committed
feat: Redis 기반 캐시 기능 추상화 및 ObjectMapper 유틸 추가
1 parent 080264a commit 4c8af90

File tree

5 files changed

+114
-47
lines changed

5 files changed

+114
-47
lines changed

src/main/java/com/example/log4u/common/config/RedisConfig.java

Lines changed: 0 additions & 47 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.example.log4u.common.config.redis;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.core.type.TypeReference;
6+
import com.fasterxml.jackson.databind.DeserializationFeature;
7+
import com.fasterxml.jackson.databind.ObjectMapper;
8+
import com.fasterxml.jackson.databind.SerializationFeature;
9+
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
10+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
11+
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
12+
13+
public class ObjectMapperFactory {
14+
15+
public static ObjectMapper objectMapper = new ObjectMapper()
16+
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
17+
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
18+
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
19+
.registerModule(new JavaTimeModule())
20+
.registerModule(new ParameterNamesModule())
21+
.registerModule(new Jdk8Module());
22+
23+
public static String writeValueAsString(Object value) {
24+
try {
25+
return objectMapper.writeValueAsString(value);
26+
} catch (JsonProcessingException e) {
27+
throw new RuntimeException(e);
28+
}
29+
}
30+
31+
public static <T> T readValue(String value, TypeReference<T> typeReference) {
32+
try {
33+
return objectMapper.readValue(value, typeReference);
34+
} catch (JsonProcessingException e) {
35+
throw new RuntimeException(e);
36+
}
37+
}
38+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.example.log4u.common.config.redis;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.data.redis.connection.RedisConnectionFactory;
6+
import org.springframework.data.redis.core.RedisTemplate;
7+
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
8+
import org.springframework.data.redis.serializer.StringRedisSerializer;
9+
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
12+
13+
import lombok.RequiredArgsConstructor;
14+
15+
@Configuration
16+
@RequiredArgsConstructor
17+
public class RedisConfig {
18+
19+
private final RedisConnectionFactory redisConnectionFactory;
20+
21+
@Bean
22+
public RedisTemplate<String, String> redisTemplate() {
23+
RedisTemplate<String, String> template = new RedisTemplate<>();
24+
template.setConnectionFactory(redisConnectionFactory);
25+
template.setKeySerializer(new StringRedisSerializer());
26+
template.setValueSerializer(new StringRedisSerializer());
27+
return template;
28+
}
29+
30+
@Bean
31+
public ObjectMapper objectMapper() {
32+
return ObjectMapperFactory.objectMapper;
33+
}
34+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.example.log4u.common.infra.cache;
2+
3+
import java.time.Duration;
4+
5+
public interface CacheManager {
6+
7+
void cache(String key, String value, Duration ttl);
8+
9+
String get(String key);
10+
11+
void evict(String key);
12+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.example.log4u.common.infra.cache;
2+
3+
import java.time.Duration;
4+
import java.util.List;
5+
import java.util.Objects;
6+
7+
import org.springframework.data.redis.core.RedisTemplate;
8+
import org.springframework.data.redis.core.script.DefaultRedisScript;
9+
import org.springframework.stereotype.Component;
10+
11+
import lombok.RequiredArgsConstructor;
12+
13+
@Component
14+
@RequiredArgsConstructor
15+
public class RedisCacheManagerImpl implements CacheManager {
16+
17+
private final RedisTemplate<String, String> redisTemplate;
18+
19+
public void cache(String key, String value, Duration ttl) {
20+
redisTemplate.opsForValue().set(key, value, ttl);
21+
}
22+
23+
public String get(String key) {
24+
return redisTemplate.opsForValue().get(key);
25+
}
26+
27+
public void evict(String key) {
28+
redisTemplate.delete(key);
29+
}
30+
}

0 commit comments

Comments
 (0)