inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Redis trung cấp/thực hành mà ngay cả người không chuyên cũng có thể hiểu được

[Thực hành] Tạo “tính năng từ khóa tìm kiếm phổ biến” hiển thị Top 10 từ khóa được tìm kiếm nhiều nhất - 2

선생님 질문있습니다!

23

0S

26 câu hỏi đã được viết

0

선생님이 설명해주신 코드를 의사코드로 짜봤는데..

search(keyword){
   db <- `UPSERT list SET count = count+1 WHERE keyword={keyword}`
}

getTop10(){
   return db <- `SELECT * FROM list ORDER BY DESC LIMIT 10`
}

대충 이렇게 되면 DB 속도때문에 느리니까

search(keyword){
	redis <- `ZINCREBY ranking_list 1 {keyword}`
}

getTop100(){
	redis <- `ZRANGE ranking_list 0 9 REV`
}

이렇게 처리하자는 느낌인거 같아서요!

우려스러운건 그럼 DB에는 어떻게 언제 저장해야하나요?

redis nosql query-tuning performance-tuning

Câu trả lời 2

0

jscode

안녕하세요 ! 질문 잘 해주셨어요~

질문해주신 내용에 대해 답변드려볼게요!

"우려스러운건 그럼 DB에는 어떻게 언제 저장해야하나요?"

-> 우선 정리해주신 의사코드가 정확합니다!

검색할 때마다 DB에 UPSERT하고 매번 정렬해서 조회하던 걸, Redis의 Sorted Set으로 옮겨서 처리하는 게 핵심이에요 !

강의에서는 Sorted Set 활용에 집중하기 위해 Redis에만 저장하도록 구현했는데요,

DB에도 데이터를 남겨야 한다면 앞에서 배운 '좋아요 수 폭증' 실습의 Write Back 전략을 응용하시면 돼요 ~

검색 요청이 들어오면 Redis의 Sorted Set에만 score를 올려두고, 스케줄러가 주기적으로 Redis에서 키워드와 score를 조회(ZRANGE … WITHSCORES)해서 DB에 한꺼번에 반영하는 방식이에요 !

이렇게 하면 검색할 때마다 DB에 쓰기 작업이 발생하지 않으면서도, Redis에 문제가 생겼을 때를 대비해 데이터를 DB에 남겨둘 수 있어요 ! 참고로 인기 검색어처럼 실시간성이 중요하고 일부 유실돼도 치명적이지 않은 데이터라면, DB에 저장하지 않고 Redis만으로 운영하는 경우도 많죠 !

그래서 검색 기록을 통계 등으로 계속 활용해야 하는지에 따라 DB 저장 여부를 결정하시면 좋을 것 같아요 :)

추가로 궁금하신 점 있으시면 또 질문 남겨주세요~~

0

0S

  • 개선전 코드
    search(keyword){

db <- UPSERT list SET count = count+1 WHERE keyword={keyword}

}

getTop10(){

return db <- SELECT * FROM list ORDER BY DESC LIMIT 10

}

  • 개선후 코드
    search(keyword){


    redis <- ZINCREBY ranking_list 1 {keyword}

    }

    getTop100(){


    redis <- ZRANGE ranking_list 0 9 REV
    }

11강 [실습] Docker로 MySQL1 분만에 실행하기

0

20

2

11강 [실습] Docker로 MySQL1 분만에 실행하기

0

19

2

구현 방법에 대한 문의

0

28

2

MSA 통신방식에 대해서 질문 있습니다.

0

38

1

최근 N개 데이터 표현 시 중복 질문

0

44

1

안녕하세요 질문있습니다.!

0

49

2

@Modifying에 관하여

1

48

1

Issuance 테이블에 status, couponId 인덱스가 꼭 필요할까요?

2

66

1

부하 테스트 시 설정 관련 질문드립니다

1

94

2

섹션 2

0

45

1

pub/sub의 연결 객체에 대해 질문 드립니다.

0

63

2

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

82

2

Request Failed 가 뜹니다.

0

75

2

수강 완료한 강의 수료증 어떻게 받나요?

0

53

1

ArticleReadService 관련 질문

0

52

1

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

2

114

1

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

95

1

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

125

1

스크립트에 대해 질문 있습니다.

1

94

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

115

1

조건 검색 질문

0

61

1

p.created_at vs u.name 인덱스 문의

0

73

2

비관적 락과 낙관적 락에서 임계 영역 질문 있습니다.

0

73

2

mysql 의 bitmap

0

81

1