선생님 질문있습니다!
23
26 asked
선생님이 설명해주신 코드를 의사코드로 짜봤는데..
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에는 어떻게 언제 저장해야하나요?
Answer 2
0
안녕하세요 ! 질문 잘 해주셨어요~
질문해주신 내용에 대해 답변드려볼게요!
"우려스러운건 그럼 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
개선전 코드
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
64
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

