>  기사  >  데이터 베이스  >  SpringBoot에서 Redis를 전역 잠금으로 사용하는 방법

SpringBoot에서 Redis를 전역 잠금으로 사용하는 방법

PHPz
PHPz앞으로
2023-05-29 19:13:041490검색

1. 잠금 없이 리소스 경쟁을 시뮬레이션합니다

public class CommonConsumerService {
    //库存个数
    static int goodsCount = 900;
    //卖出个数
    static int saleCount = 0;
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 1000; i++) {
            new Thread(() -> {
                try {Thread.sleep(2);} catch (InterruptedException e) {}
                if (goodsCount > 0) {
                    goodsCount--;
                    System.out.println("剩余库存:" + goodsCount + " 卖出个数" + ++saleCount);
                }
            }).start();
        }
        Thread.sleep(3000);
    }
}

한 번 실행해 보세요. 마지막 몇 줄의 출력 결과는 다음과 같습니다. 남은 0개 항목 중 899개 항목만 매진되었습니다. 일부 품목은 누군가에 의해 판매된 것이 분명합니다.

...
남은 재고: 5개 판매 893
남은 재고: 5개 판매 894
남은 재고: 4개 판매 895
남은 재고: 2개 판매 896
남은 재고: 2 판매 수량 897
남은 재고: 1개 판매된 단위 수 898
남은 인벤토리: 0 판매된 단위 수 899

두 번째, redis를 사용하여 잠금

redis는 단일 스레드이며 직렬로 실행되므로 다음은 Redis를 사용하여 리소스를 잠그는 것입니다.

1 주문하고 맞으세요.

...

남은 재고: 6 판매 894

남은 재고: 5 판매 895

남은 재고: 4 판매 896

남은 재고: 3 판매 897

남은 재고: 2 판매 수량 898
남은 재고: 1 판매 수량 899

남은 재고: 0 판매 수량 900

위 내용은 SpringBoot에서 Redis를 전역 잠금으로 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제