강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của sundai0163
sundai0163

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

Học thiết kế hệ thống quy mô lớn thông qua việc tự tay xây dựng với Spring Boot - Bảng tin

Triển khai số lượt thích

좋아요 수 구현 PessimisticLock1 질문

Đã giải quyết

Viết

·

94

0

안녕하세요 강사님 강의 잘 듣고 있습니다.

아래 내용이 궁금하여 질문 드립니다.

 

질문:

PessimisticLock1에서 주석 달아놓으신

"트래픽이 몰리는 상황에서 유실될 수 있으니

게시글 생성 시점에 미리 0으로 초기화해둘 수 있다"

는 부분에서 어떤 이유로 데이터가 유실이 될 수 있는지 궁금한데 예시나 상황에 대해서 추가 설명해주실 수 있을까요?!

 

감사합니다.

 

javamysqlspring-bootkafkaredis

Câu trả lời 2

1

sundai0163님의 프로필 이미지
sundai0163
Người đặt câu hỏi

이해되었습니다 강사님

감사합니다!

1

kuke님의 프로필 이미지
kuke
Người chia sẻ kiến thức

선웅님, 안녕하세요!

 

        int result = articleLikeCountRepository.increase(articleId);
        if (result == 0) {
            // 최초 요청 시에는 update 되는 레코드가 없으므로, 1로 초기화한다.
            // 트래픽이 순식간에 몰릴 수 있는 상황에는 유실될 수 있으므로, 게시글 생성 시점에 미리 0으로 초기화 해둘 수도 있다.
            articleLikeCountRepository.save(
                    ArticleLikeCount.init(articleId, 1L)
            );
        }

위 코드에서 2개의 요청이

int result = articleLikeCountRepository.increase(articleId);

위 코드를 "동시"에 호출한 상황을 가정해보겠습니다.

아직 ArticleLikeCount가 생성된 적이 없다면, 두 요청은 모두 result가 0으로 응답됩니다.

if (result == 0)

두 요청은 위 조건이 모두 true로 들어가면서 ArticleLikeCount 1로 초기화하는 코드를 두 번 수행하게 됩니다.

그러면 1개의 요청은 유실될 수 있는 것입니다!

Hình ảnh hồ sơ của sundai0163
sundai0163

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

Đặt câu hỏi