[Redis]Redis Cache

2023. 7. 20. 13:45· DataBase/Redis
목차
  1. Redis Cache 사용 구조
  2. Spring Boot 사용
  3. Spring Boot 설정
  4. TEST 시나리오 및 결과
728x90

redis logo

Redis Cache 사용 구조

① Client가 Server로 요청을 한다.

② Cache된 Data가 있으면, Redis의 Cache Data를 사용한다.

③ Data가 없다면, DB Data를 사용한다.

④ DB에서 가져온 Data를 Redis Cache에 저장한다.

Redis Cache 구조

Spring Boot 사용

 Redis Cache 사용을 위한 Spring Boot @Annotation

@Annotation 설  명
@EnableCaching - Spring Boot에게 캐싱 기능이 필요하다고 전달
- Spring Boot Starter Class에 적용
@Cacheable - DB에서 App으로 데이터를 가져오고 Cache에 저장하는데 사용
- DB에서 데이터를 가져오는 메서드에 적용
@CachePut - DB의 데이터 업데이트가 있을 때 Redis Cache에 데이터를 업데이트
- DB에서 PUT/PATCH와 같은 업데이트에서 사용
@CacheEvict - DB의 데이터 삭제가 있을 때 Redis Cache에 데이터를 삭제
- DB에서 Delete와 같은 삭제에서 사용

Spring Boot 설정

  • Spring Boot Starter Class에 Redis Cache 사용 설정
@SpringBootApplication
@EnableCaching
public class DemoApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
       SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
       return builder.sources(DemoApplication.class);
    }

}
  • application.properties 설정
### database
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://${DB_IP_주소}/hfi
spring.datasource.username=${DB_ID}
spring.datasource.password==${DB_PASSWORD}

### jpa
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.cache.type=redis
spring.cache.redis.cache-null-values=true

…

ConfigClass 설정

  • Redis 연결 정보 설정
  • Redis CacheManager 설정
@Configuration
@EnableCaching
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;

    public RedisConfig() {
    }

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration conf = new RedisStandaloneConfiguration();
        conf.setHostName(this.host);
        conf.setPort(this.port);
        return new LettuceConnectionFactory(conf);
    }

    @Bean
    public CacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration conf = RedisCacheConfiguration.defaultCacheConfig().serializeKeysWith(SerializationPair.fromSerializer(new StringRedisSerializer())).serializeValuesWith(SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        return RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory).cacheDefaults(conf).build();
    }
}

Domain 모델 설정

  • DB Table 기준으로 모델 작성
  • Table 이름 명시
@Data
@Entity
@Table(name = "userinfo")
public class Userinfo {

    @Id
    private String emailaddress;
    private String zipcode;
    private String zipaddress;
    private String detailaddress;
    private Timestamp regdate;
    private Timestamp unregdate;
    private String statuscd;

(생략)…
}

Repository 설정

  • JpaRepository 상속받아서 생성
  • emailladdress를 통해 Userinfo를 얻어오는 메서드 생성
@Repository
public interface RedisUserRepository extends JpaRepository<Userinfo, String> {
    Optional<Userinfo> findByEmailaddress(String emailaddress);
}

Service 설정

  • eamiladdress를 통해 사용자 정보를 조회하는 서비스 생성
@Service
public class RedisService {
    @Autowired
    private RedisUserRepository redisUserRepository;

    public RedisService() {
    }

    @Cacheable(value = {"Userinfo"}, key = "#emailaddress", cacheManager = "redisCacheManager")
    public Userinfo getUser(String emailaddress) {
        return (Userinfo)this.redisUserRepository.findByEmailaddress(emailaddress).get();
    }

    @CacheEvict(value = {"Userinfo"}, key = "#emailaddress", cacheManager = "redisCacheManager")
    public void deleteUser(String emailaddress) {
        Userinfo userinfo = (Userinfo)this.redisUserRepository.findByEmailaddress(emailaddress).get();
        this.redisUserRepository.delete(userinfo);
    }
}

Controller 설정

  • http 호출 TEST를 위한 컨트롤러 작성
@RestController
@RequestMapping("/member")
public class RedisController {
    @Autowired
    RedisService redisService;

    @GetMapping("/{emailaddress}")
    public Userinfo getUser(@PathVariable String emailaddress){
        return redisService.getUser(emailaddress);
    }

    @DeleteMapping("/{emailaddress}")
    public String deleteUser(@PathVariable String emailaddress){
        redisService.deleteUser(emailaddress);
        return "User with eamiladdress : " + emailaddress + "deleted.";
    }
}

TEST 시나리오 및 결과

1. http 호출 (http://127.0.0.1:7071/member/20002@tmaxsoft.co.kr)

2. 첫 호출시 Redis Cache에 데이터가 없기 때문에 DB에서 쿼리 조회 로그 확인 됨

3. 두번 째 호출 부터는 App 로그에서 쿼리 로깅이 되지 않음 (Redis로부터 Cache 데이터를 가져오기 때문에)

4. Redis에 저장된 데이터 확인

redis key 조회

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'DataBase > Redis' 카테고리의 다른 글

[Redis]기능 TEST THREADED I/O  (0) 2023.08.07
[Redis]기능 TEST CLIENTS  (0) 2023.08.07
Redis Spring 연동 및 사용  (0) 2023.07.20
Redis 설정(Security, Client, Memory)  (0) 2023.07.20
Redis 데이터 관리  (0) 2023.07.19
  1. Redis Cache 사용 구조
  2. Spring Boot 사용
  3. Spring Boot 설정
  4. TEST 시나리오 및 결과
'DataBase/Redis' 카테고리의 다른 글
  • [Redis]기능 TEST THREADED I/O
  • [Redis]기능 TEST CLIENTS
  • Redis Spring 연동 및 사용
  • Redis 설정(Security, Client, Memory)
JOTAN
JOTAN
기술 블로그
조탄 기술블로그기술 블로그
JOTAN
조탄 기술블로그
JOTAN
전체
오늘
어제
  • 목 록
    • Security
    • WEB
      • WebtoB
      • Apache
      • Nginx
    • WAS
      • Tomcat
      • JEUS
      • Wildfly
    • Observability
      • Fluentd
    • CI CD
    • DataBase
      • Redis
      • PostgreSQL
      • Victoria Metrics
    • Container Registry
      • Harbor
    • Docker
    • Kubernetes
    • Message Queue
      • Kafka
    • 개발
      • Spring Boot
      • Java
      • Shell Script
    • 기본지식
    • OS
      • Debian
      • Red Hat

블로그 메뉴

  • 홈

공지사항

  • 조'S IT 영역

인기 글

태그

  • Kubernetes
  • Redis TEST
  • nginx
  • redis 설정
  • Redis 기능 검증
  • 쿠버네티스 설치
  • fluentd
  • harbor
  • kubernetes install
  • kubernetes dns
  • wildfly
  • apache
  • tomcat
  • redis
  • 설치
  • SSL
  • 쿠버네티스
  • Redis Cache
  • 레디스
  • apache vhosts
  • apache ssl 설정
  • PostgreSQL
  • Wildfly Session Clustering
  • webtob
  • KAFKA
  • 인증서
  • 레디스 설정
  • jboss session clustering
  • ssl vhosts
  • wildfly14

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
JOTAN
[Redis]Redis Cache
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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