Dữ liệu lõiThương mại điện tử

Flash sale và tồn kho

Bán đúng số hàng bạn có khi mười nghìn người mua nhấn Mua trong cùng một giây, và chặn các bot.

trừ tồn kho
Nguyên tử
đơn vị bán vượt
0
giữ chỗ tự giải phóng
10 phút
Bước 1 trên 6
Nạp tồn kho

500 đơn vị được đưa ra bán.

Phiên ví dụplaying
# Nạp tồn kho
hotkv> SET stock:sneaker-x 500
OK

Một hướng dẫn minh họa động với các lệnh HotKV thật và phản hồi ví dụ. Nhấn vào bất kỳ bước nào để nhảy tới đó. Lệnh và phản hồi giữ nguyên bằng tiếng Anh, đúng như bạn gõ và thấy trong HotKV.

Vấn đề

Trong một flash sale, cơ sở dữ liệu tồn kho là nút thắt cổ chai đúng vào lúc quan trọng nhất. Kiểm tra kiểu đọc rồi ghi bán vượt số hàng khi có đồng thời, giỏ hàng bị bỏ dở khóa tồn kho mãi mãi, và các bot mua hết hàng trước khi khách thật tải xong trang.

HotKV xử lý như thế nào

Tồn kho nằm trong một bộ đếm được trừ nguyên tử, nên những người mua đồng thời không bao giờ lấy được nhiều hơn số hiện có. Mỗi lần giữ chỗ là một khóa có thời hạn mười phút, giới hạn tốc độ theo từng khách hàng làm chậm các bot, và các đơn hàng đã xác nhận đi vào một stream để bộ phận thực hiện đơn xử lý theo nhịp của riêng mình.

Từng bước một

Điều gì xảy ra, từng lệnh một

  1. 01

    Nạp tồn kho

    500 đơn vị được đưa ra bán.

    SET stock:sneaker-x 500
  2. 02

    Kiềm chế các bot

    Mỗi khách hàng được thử hai lần trong 10 giây. Bot vượt mức đó ngay lập tức.

    GCRA.LIMIT buy:customer:881 10000 2
  3. 03

    Lấy một đơn vị

    DECR là nguyên tử. 10.000 lượt nhấp đồng thời không bao giờ lấy được nhiều hơn 500 đơn vị.

    DECR stock:sneaker-x
  4. 04

    Giữ chỗ trong mười phút

    Lượt giữ chỗ tự hết hạn nếu thanh toán bị bỏ dở, và một trình quét trả đơn vị đó về.

    SET hold:sneaker-x:order-7781 customer:42 NX EX 600
  5. 05

    Hết hàng được xử lý

    Khi DECR xuống dưới không, đơn vị đó được trả lại và người mua thấy hết hàng. Tồn kho không bao giờ âm lâu.

    INCR stock:sneaker-x
  6. 06

    Giao đơn cho bộ phận thực hiện

    Các đơn đã thanh toán được thêm vào một stream. Hệ thống kho xử lý chúng theo nhịp của riêng nó.

    XADD orders * order 7781 sku sneaker-x customer 42
Phù hợp ở đâu

Các tình huống thực tế

Đợt mở bán giày và hàng lưu niệm

Các phiên bản giới hạn bán hết trong vài giây mà không bán vượt dù chỉ một đôi.

Bán vé

Ghế được giữ vài phút trong lúc thanh toán và tự động được giải phóng nếu người mua rời đi.

Giao đồ ăn và tạp hóa

Khung giờ giao hàng là các bộ đếm, được trừ nguyên tử khi khách hàng đặt chúng.

Tích hợp sẵn

Bạn nhận được gì

Bộ đếm nguyên tử

DECR và INCR thay đổi tồn kho trong một bước mà không có race.

DECRINCRBY

Giữ chỗ có hết hạn

Lượt giữ chỗ là các khóa có TTL.

SETNXEX

Chống bot

Giới hạn theo từng khách hàng với thời gian thử lại chính xác.

GCRA.LIMIT

Bàn giao đơn hàng

Một stream cho việc thực hiện đơn, với nhóm consumer và xác nhận.

XADDXREADGROUP

Câu hỏi thường gặp

Lượt giữ chỗ hết hạn trả lại tồn kho thế nào?

Các lượt giữ chỗ hết hạn có thể được nhận ra thông qua thông báo không gian khóa hoặc một lượt quét định kỳ, và nó tăng bộ đếm tồn kho trở lại.

Tôi có thể kiểm tra tồn kho mà không lấy nó không?

Có. GET trả về số hiện tại. Chỉ DECR mới giữ chỗ.

Còn giỏ hàng nhiều mặt hàng thì sao?

Dùng MULTI và EXEC, hoặc một function, để trừ nhiều bộ đếm cùng nhau.

Trường hợp sử dụng liên quan

Thử trên khối lượng công việc của chính bạn

HotKV nói giao thức Redis, nên bạn có thể trỏ một client hiện có tới nó và chạy chính những lệnh này.