DB/Redis

[Redis] redis 파헤치기

2023. 2. 13. 00:42
캐시란 자주 사용하는 데이터를 미리 보관해둔 임시 장소를 의미

캐시는 비교적 저장 공간이 적고 전체적인 비용이 비쌈
대신 빠른 IO를 통해 성능적 이점을 가져올 수 있음
일반적으로 아래와 같은 특징들을 가지고 있는 데이터에 대해 캐시를 사용하면 좋음

  • 도중에 변경될 일이 없는 데이터베이스 조회 값(캐시와 DB값이 다를 수 있는 경우가 있기 때문에)
  • 자주 호출되는 데이터

스프링 부트에서 사용할 수 있는 캐시는 대부분 JSR-107을 따름

JSR

  • Java Specification Requests의 줄임말, 자바 플랫폼에 대한 규격을 제안하거나 기술
  • 그 중 JSR-107은 JCache에 관한 내용

JSR-107을 따르는 캐시를 사용하면 어떤 구현체 캐시를 사용하는지에 관계 없이 추상화를 지원

로컬 캐시

  • 로컬(해당 서버)에서만 사용하는 캐시
  • 외부 서버와 트랜잭션 비용이 들지 않기 떄문에 속도가 빠름
  • 로컬에서만 사용하기 때문에 분산 서버의 구조에서 캐시를 공유하기 어려움

글로벌 캐시

  • 여러 서버에서 접근할 수 있는 캐시 서버를 구축하여 사용하는 방식
  • 네트워크를 통해 데이터를 가져오는 트랜잭션 비용이 있기 때문에 로컬 캐시에 비해 상대적으로 느림
  • 별도의 서버로 운영 되기 때문에 서버 간 데이터 공유에 용이함

Redis

Remote Dictionary Server의 약자로 키-값 구조의 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비관계형 데이터 관리 시스템

특징

  1. In-Memory data structure
  2. Programmability
  3. Extensibility
  4. Persistence
  5. Clustering
  6. High availability

 
의존성 추가 : Spring-boot-starter-data-redis
Redis Client는 크게 2가지가 있음 ( Jedis, Lettuce )
스프링 부트 2.0 이후로는 기본 클라이언트로 Lettuce를 사용
application.properties설정 추가

spring.redis.host=localhost
spring.redis.port=6379

RedisConfig 클래스 추가

@Configuration
public class RedisCacheConfig implements CacheConfig {

    @Value("localhost")
    private String host;
    
    @Value("port")
    private String port;
    
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
    	return new LettuceConnectionFactory(host, port);
    }
    
    // redisTemplate을 이용할 경우에 추가, 이번에는 repository를 이용할 예정이라 사용안함
    @Bean
    public RedisTemplate<?, ?> redisTemplate() {
    	RedisTemplate<?, ?> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        return redisTemplate;
    }
}

 

redis 사용방법

1. redisTemplate을 만들어서 사용하는 방법

// 간략한 RedisTemplate 사용법
@Component
public class Test {

  private final RedisTemplate<String, String> redisTemplate;
    
    @Autowired
    public Test(RedisTemplate<String, String> redisTemplate) {
    	this.redisTemplate = redisTemplate;
    }
    
    public void test() {
    	ValueOperations<String, String> valueOperation = redisTemplate.opsForValue();
        valueOperations.set(); // 등록
    }
}

2. repository에 인터페이스를 만들어서 사용하는 방법
인터페이스

public interface RedisRepository extends CrudRepository<ResponseDto, String> {

}

 
Dto

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@RedisHash(value = "shortUrl", timeToLive = 60) // 초 단위
public class ShortUrlResponseDto implements Serializable {
	private static final long serialVersionUID = -2121332425235L;
    
    @Id // 키
    private String orgUrl;
    
    private String shortUrl;
}

@RedisHash의 기능 : 키 값의 prefix로 붙을 수 있는 value를 지정하였음

// 저장
ResponseDto responseDto = new ResponseDto(orgUrl, shortUrl);
redisRepository.save(responseDto);

// 조회
Optional<ResponseDto> responseDto = repository.findById(orgUrl);
by 어라운드 허브 스튜디오
향찡
향찡
백엔드 개발자
향찡
Dev Story
향찡
전체
오늘
어제
  • 분류 전체보기 (97)
    • Java (42)
      • design pattern (7)
      • JavaCafe Study (4)
    • Kotlin (2)
    • Spring (4)
    • TypeScript (1)
    • DevOps (2)
      • AWS (1)
    • DB (4)
      • Real Mysql (2)
      • Redis (1)
    • OS (3)
      • Linux (3)
    • Algorithm (7)
    • Clean Code (1)
    • Git (5)
    • 환경 설정 (2)
    • 그냥 생각 (1)
    • 서평 (12)
      • 한빛미디어, 나는리뷰어다 2022 (4)
    • 세미나 (11)
    • 기타 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • java #study
  • 알고리즘
  • 스터디올래
  • 백준
  • 깃 #깃허브
  • 한빛미디어
  • 패스트캠퍼스
  • OKKY
  • 자바스크립트
  • 인프런
  • 파이썬
  • 스터디
  • 코딩테스트
  • LeetCode
  • 스터디할래
  • 제이펍
  • git #github #doit #형상관리
  • 코딩자격증
  • 패캠
  • 자바카페
  • fastcampus
  • 코딩교육
  • 자바스터디
  • java
  • Real MySQL
  • Kotlin
  • 자바
  • 유스콘
  • 백기선
  • 패스트캠퍼스후기

최근 댓글

최근 글

hELLO · Designed By 정상우.
향찡
[Redis] redis 파헤치기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.