본문 바로가기

반응형

Redis

(3)
[spring] redis로 caching해서 dbms의 부하 줄이기 - 3 한참 관련 로직을 작성하던 중 클래스를 잘못 설계한 벽에 부딪히고 말았다.그리고 토요일 kt 기지국 화재로....모든 의욕을 잃었다.백엔드 프로그래밍에서는 계층마다 dto를 둔다. db에서 데이터를 읽고 쓸때는 entity class를 사용한다.클라이언트와 통신할 때는 entity class를 그대로 노출할 수 없으니 request의 parameter와 response와 mapping해주는 dto를 둔다.그리고 현재 redis를 사용할 경우에는 dto를 하나 더 사용하는 경우가 생길 수 있다.그런데 맨 처음 rdbms를 사용할 때는 redis를 고려하지 않고 dto를 하나만 두고 service 객체에서 하나의 dto 타입만을 반환해줘서 문제가 생겼다. 위와 같이 클라이언트에 보내줄 데이터타입으로 전환하는..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 2 1. 필요한 기능 테스트 코드로 작성 EventCacheService라는 객체를 이용해서 캐싱과 관련된 기능들을 구현한다. 우선 test를 작성해서 필요한 메소드들을 명세해보자 컨텐츠를 조회하는 work flow 1. 사용자는 서버에 컨텐츠 요청(페이징과 검색 조건 있습니다.)2. 검색조건으로 조합한 키로 레디스에 관련 컨텐츠가 캐싱되어 있는지 확인(exist()에 해당)(레디스에 키가 없는 경우) 3. 값이 없는 경우 mariadb에서 입력받은 검색조건으로 모든 컨텐츠 조회하고 redis에 저장(save()에 해당)4. key에 대해서 expire 속성을 넣어준다.(다음 크롤링할 떄 까지로(최소 일주일 가량 될 것)5. 이제 사용자에게 컨텐츠를 리턴해줌(레디스에 키가 있는 경우)3. 레디스에서 해당하는..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 1 평소에 Nosql에 관심이 많았는데. 이번에 퇴사하고 개인프로젝트를 하면서 redis로 caching을 해보기로 결심했다.본래 목적은 캐싱이었는데 사용자의 이벤트 조회 로그를 저장해서 서비스의 메인에 내가 조회한 상품을 노출하는 기능을 먼저 구현하게 되었다. (이것도 차후 글을 올려야겠다.)로그를 기록하고 메인에 노출하는 기능을 구현하면서 레디스가 제공하는 여러 자료형에 대해 이해하고 성능도 테스트해볼 수 있었는데 역시 In-memory db라서 I/O 성능이 꽤 좋다고 느꼈었다.그래서 전격적으로 db의 데이터를 redis로 옮겨서 캐싱을 해보기로 결정했다. 1. 어떤 자료형으로 구현할 것인가? 레디스가 제공하는 자료형은 set, sorted set,hash, list, string으로 네가지가 있다.모..

반응형