JDK: 17
Spring Boot: 3.2.5
Redis: 3.2.4
implementation 'org.springframework.boot:spring-boot-starter-data-redis:3.2.4'
.yml
spring:
redis:
host: localhost
port: 6379
RedisConfig.java
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(this.redisConnectionFactory());
// key, value, hashKey, hashValue, 그 외 모든 데이터를 직렬화
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
Repository를 사용하면, Entity를 설정해야 한다.
Token.java
@Data
@RedisHash(value = "token") // key값 prefix
public class Token {
@Id // key
private String authId;
@Indexed // index 적용
private String token;
@TimeToLive // 만료시간
private long ttl;
}
JpaRepository를 사용하는 것과 유사하게 CrudRepository를 상속 받는다.
TokenRepository.java
public interface TokenRepository extends CrudRepository<Token, String> {}
@Service
public class RedisUtils {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void setData(String key, String value, long expiredTime) {
redisTemplate.opsForValue().set(key, value, expiredTime, TimeUnit.MILLISECONDS); // 시간 단위까지 지정
}
public String getData(String key) {
return redisTemplate.opsForValue().get(key);
}
public void deleteData(String key) {
redisTemplate.delete(key);
}
}
RedisTemplate의 함수마다 자료구조가 다르기 때문에
적절한 자료구조에 따라 함수를 호출하면 된다.