spring:
data:
redis:
host: localhost
port: 6379
username: default
password: <설정한 비밀번호>
@Test
public void createTest() {
Item item = Item.builder()
.name("keyboard")
.description("Mechanical Keyboard Expensive 😢")
.build();
itemRepository.save(item);
}

StringRedisTemplate는 redisTemplate을 상속받는, redis와 소통하기 위한 템플릿의 모음
복잡한 작업없이 자바의 문자열만 다루는 경우 사용 가능. Key와 value가 전부 자바의 문자열이라고 가정, 문자열 데이터를 주고받기 위한 작업들을 준비하며, 기본 설정을 가지고 자동으로 만들어져 주입되는 Spring bean이다.
이 StringRedisTemplate은 각 자료형에 대응하는 *Operations 인터페이스 구현체를 반환할 수 있는 메서드들을 가지고 있다. 예를들어, opsForValue() 메서드를 호출하게 될 경우 ValueOperations<String, String>이 반환된다.
여기서 String은 레디스의 문자열을 의미하지 않는다. 레디스와 소통 위한 자바의 자료형을 의미. 즉, 레디스의 여러가지 타입을 자바의 문자열과 연결된다는 의미이다.
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void stringOpsTest() {
ValueOperations<String,String> ops = stringRedisTemplate.opsForValue();
//레디스 명령어 SET, GET을 메서드 형태로 보관하고 있는 것
ops.set("simplekey", "simplevalue");
System.out.println(ops.get("simplekey"));
//집합을 조작하기 위한 클래스 - SADD 명령어와 같다.
SetOperations<String, String> setOps = stringRedisTemplate.opsForSet();
setOps.add("hobbies", "games");
setOps.add("hobbies", "coding", "drink", "games");
System.out.println(setOps.size("hobbies"));
stringRedisTemplate.expire("hobbies", 10, TimeUnit.SECONDS); //10초뒤 삭제
stringRedisTemplate.delete("simplekey");
}
모든 데이터를 자바의 문자열로 주고받을시 간단히 StringRedisTemplate를 쓰면 되고, 다른 상세한 redis의 작업을 하려면 redisConfig에서 redisTemplate을 빈으로 등록 후 사용한다.
@Configuration
public class RedisConfig {
@Bean
//RedisConnectionFactory는 yml에 넣은 정보를 바탕으로 만들어지게 된다.
public RedisTemplate<String, ItemDto> itemRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, ItemDto> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setKeySerializer(RedisSerializer.string());
template.setValueSerializer(RedisSerializer.json());
return template;
}
}
@Autowired
private RedisTemplate<String, ItemDto> itemRedisTemplate;
@Test
public void itemRedisTemplateTest() {
ValueOperations<String, ItemDto> ops = itemRedisTemplate.opsForValue();
ops.set("my:keyboard", ItemDto.builder()
.name("Mechanical Keyboard")
.price(300000)
.description("Expensive 😢")
.build());
System.out.println(ops.get("my:keyboard"));
ops.set("my:mouse", ItemDto.builder()
.name("mouse mice")
.price(100000)
.description("Expensive 😢")
.build());
System.out.println(ops.get("my:mouse"));
}