Redis는 무엇일까?
정의는 메모리 기반의 Key-Value 구조의 데이터 관리 시스템
Memcache와 차이점
그리고 종종 MemCache와 종종 비교됩니다. 그럼 MemCache를 잠시 살펴봅시다. MemCache의 특징들은 아래와 같습니다.
- 처리속도가 빠르다 => 디스크를 거치지 않기 때문에 빠르다
- 휘발성을 가진다 => 프로세스가 죽거나 장비가 꺼지면 데이터가 사라진다
- 메모리를 재사용한다 => 메모리가 부족하면 LRU 알고리즘에 의해 데이터가 사라진다
그리고 MemCache와 비교되는 Redis도 위와 같은 특성을 그대로 가지게 됩니다. 하지만 조금씩 다릅니다.
Redis와 MemCache의 차이점
- 데이터를 메모리 + 디스크 혹은 다른 서버 메모리에 저장한다. 따라서 프로세스가 죽어도 데이터가 저장될 수 있다.
- 문자열만을 지원하는 MemCache와 다르게 여러 자료구조를 추가로 지원한다.
- 메모리를 재사용하지 않는다.
Redis의 장점
- RDBMS 보다 읽기 성능이 빠르다
- RDBMS 보다 읽기 성능은 빠르지만 수정, 삭제에 불리하다.
- Memcache 보다 읽기 성능은 비교적 느리나 수정, 삭제는 월등히 빠르다.
- Key-Value 구조를 사용해서 빠른 속도
- Value에 다양한 자료구조 지원
- String, Lists, Sets, Sorted sets, Hashs 지원
- 다양한 API 지원
- Single Thread
- 하나의 서버에 여러대의 Redis를 띄울 수 있다.
- Master - Slave 형식으로 구현 가능해서 백업이 가능하다.
Redis의 단점
- 메모리 파편화가 발생하기 쉽다.
- copy-on-write 방식을 사용하기 때문에 새로 변경된 메모리 페이지를 복사해서 사용하여 변경을 적용한다. 따라서 메모리가 실제 사용량보다 추가로 더 필요하다.
- 대규모 데이터에 대한 응답 속도의 불안정성
Spring Boot에서의 예시
Spring Boot에서 간단하게 사용하는 방법을 소개하고자 합니다. Spring Boot와 Maven을 사용했습니다.
- Dependency 추가
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.5.0</version> </dependency>
-
- StringRedisTemplate 이용
-
@RestController public class RedisController { private final StringRedisTemplate redisTemplate; public RedisController(StringTemplate redisTemplate) { this.redisTemplate = redisTemplate; } @RequestMapping public void testRedis() { //ValueOperation ValueOperations<String, String> valueOperations = redisTemplate.opsForValue(); valueOperations.set("Key", "Value"); System.out.println(valueOperations.get("Key")); //ListOperation ListOperations<String, String> listOperations = redisTemplate.opsForList(); listOperations.rightPush("List Key", "List Value"); System.out.println(listOperations.range("List Key", 0, 10)); //SetOperation SetOperations<String, String> setOperations = redisTemplate.opsForSet(); setOperations.add("Set Key", "Set Value"); for (String member : setOperations.members("Set Key")) { System.out.println(member); } //zSetOperation ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet(); zSetOperations.incrementScore("Sort Set Key", "Sort Set Value", 1); zSetOperations.rangeByScore("Sort Set Key", 0, 4).forEach(System.out::println); } }
-
아주 간단하게만 예제를 작성해봤습니다. 활용방법은 무궁무진하니까요 각자의 환경에 맞춰서 Redis를 사용해보시면 좋을 것 같습니다 ㅎㅎ
반응형
'Web > 웹 상식' 카테고리의 다른 글
Java의 직렬화란 (0) | 2021.07.05 |
---|---|
HTTP/3에 대해서 (0) | 2021.06.26 |
Design Pattern 디자인 패턴에 대해서 (0) | 2021.06.04 |
[Spring] 스프링 DI(Dependency Injection)은 어떻게 이루어지나 (0) | 2021.05.24 |
SPA에 대해서 (Single Page Application) (0) | 2021.05.01 |