728x90
- Redis가 타 캐시 시스템(ex. MemCache 등)과 다른 특징은 아래와 같습니다.
- Redis는 List, Set, Sorted Set, Hash 등과 같은 Collection을 지원합니다.
- Redis는 Single Thread → 따라서 Atomic 보장
- persistence를 지원하여 서버가 꺼지더라도 다시 데이터를 불러들일 수 있습니다.
- Redis의 주요 사용처
- Remote Data Store
- 여러 서버의 Data 공유를 위해 사용될 수 있습니다.
- 특히, Redis의 경우 Single Thread 이므로 Race Condition 발생 가능성이 낮다는 것을 활용할 수 있습니다.
- 인증 토큰 개발
- Ranking Board (Sorted Set)
- Job QUEUE 등
- Remote Data Store
- Redis Template을 Spring에 의존성 설정(pom.xml)
- compile 'org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE'
- Redis Source-Code 설정
- Redis 접근 Library는 Spring Data Redis에 내장되어있는 Lettuce를 사용하였습니다.
@Configuration
@EnableRedisRepositories
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisHost, redisPort);
}
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
- Spring Data Redis는 opsFor[X](ex. opsForValue, opsForSet, opsForZSet 등)라는 메서드를 제공합니다.
- 해당 메서드를 사용하면 각 자료구조에 대해서 쉽게 Serialize 및 Deserialize 할 수 있습니다.
메서드설명
opsForValue | Strings를 쉽게 Serialize / Deserialize 해주는 Interface |
opsForList | List를 쉽게 Serialize / Deserialize 해주는 Interface |
opsForSet | Set를 쉽게 Serialize / Deserialize 해주는 Interface |
opsForZSet | ZSet를 쉽게 Serialize / Deserialize 해주는 Interface |
opsForHash | Hash를 쉽게 Serialize / Deserialize 해주는 Interface |
- 이중 String과 List를 redis를 활용하여 캐싱하여 출력하면 다음과 같은 결과를 얻을 수 있습니다.
- Redis Strings 자료구조 활용 예
@Autowired
StringRedisTemplate redisTemplate;
@Test
public void testStrings() {
final String key = "kuka84";
final ValueOperations<String, String> stringStringValueOperations = redisTemplate.opsForValue();
stringStringValueOperations.set(key, "1"); // redis set 명령어
final String result_1 = stringStringValueOperations.get(key); // redis get 명령어
System.out.println("result_1 = " + result_1);
stringStringValueOperations.increment(key); // redis incr 명령어
final String result_2 = stringStringValueOperations.get(key);
System.out.println("result_2 = " + result_2);
}
result_1 = 1
result_2 = 2 // 저장한데로 잘 출력함
- Redis List 자료구조 활용 예
@Autowired
StringRedisTemplate redisTemplate;
@Test
public void testList() {
final String key = "eden2";
final ListOperations<String, String> stringStringListOperations = redisTemplate.opsForList();
stringStringListOperations.rightPush(key, "H");
stringStringListOperations.rightPush(key, "e");
stringStringListOperations.rightPush(key, "l");
stringStringListOperations.rightPush(key, "l");
stringStringListOperations.rightPush(key, "o");
stringStringListOperations.rightPushAll(key, " ", "e", "d", "e", "n");
final String character_1 = stringStringListOperations.index(key, 1);
System.out.println("character_1 = " + character_1);
final Long size = stringStringListOperations.size(key);
System.out.println("size = " + size);
final List<String> ResultRange = stringStringListOperations.range(key, 0, 9);
System.out.println("ResultRange = " + Arrays.toString(ResultRange.toArray()));
}
character_1 = e
size = 10
ResultRange = [H, e, l, l, o, , e, d, e, n] // 저장한데로 잘 출력함
728x90
'Redis' 카테고리의 다른 글
Redis-cli 명령어 정리(List, Hash) (0) | 2022.08.18 |
---|