Data intiE-commerce

Flash Sale dan Inventaris

Jual tepat sebanyak stok yang Anda miliki saat sepuluh ribu pembeli mengeklik Beli pada detik yang sama, dan jauhkan bot.

pengurangan stok
Atomik
unit terjual berlebih
0
penahanan yang melepas sendiri
10 menit
Langkah 1 dari 6
Muat stok

500 unit dijual.

Sesi contohplaying
# Muat stok
hotkv> SET stock:sneaker-x 500
OK

Panduan beranimasi dengan perintah HotKV yang sebenarnya dan balasan contoh. Klik langkah mana pun untuk melompat ke sana. Perintah dan balasan tetap dalam bahasa Inggris, persis seperti yang Anda ketik dan lihat di HotKV.

Masalahnya

Dalam flash sale, database inventaris menjadi hambatan tepat ketika paling penting. Pemeriksaan baca-lalu-tulis menjual berlebihan di bawah konkurensi, keranjang yang ditinggalkan mengunci stok selamanya, dan bot membeli stok sebelum pelanggan asli selesai memuat halaman.

Cara HotKV menanganinya

Stok berada di penghitung yang dikurangi secara atomik, sehingga pembeli bersamaan tidak pernah dapat mengambil lebih dari yang ada. Setiap reservasi adalah kunci dengan kedaluwarsa sepuluh menit, pembatas laju per pelanggan memperlambat bot, dan pesanan terkonfirmasi masuk ke stream untuk diproses pemenuhan dengan kecepatannya sendiri.

Langkah demi langkah

Apa yang terjadi, perintah demi perintah

  1. 01

    Muat stok

    500 unit dijual.

    SET stock:sneaker-x 500
  2. 02

    Awasi bot

    Setiap pelanggan boleh mencoba dua kali per 10 detik. Bot langsung melampauinya.

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

    Ambil satu unit

    DECR bersifat atomik. 10.000 klik bersamaan tidak pernah dapat mengambil lebih dari 500 unit.

    DECR stock:sneaker-x
  4. 04

    Tahan selama sepuluh menit

    Reservasi kedaluwarsa sendiri jika checkout ditinggalkan, dan sebuah sweeper mengembalikan unitnya.

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

    Habis terjual ditangani

    Ketika DECR turun di bawah nol, unit dikembalikan dan pembeli melihat habis terjual. Stok tidak pernah negatif lama.

    INCR stock:sneaker-x
  6. 06

    Serahkan pesanan ke pemenuhan

    Pesanan yang dibayar ditambahkan ke stream. Sistem gudang memprosesnya dengan kecepatannya sendiri.

    XADD orders * order 7781 sku sneaker-x customer 42
Di mana ini cocok

Skenario dunia nyata

Peluncuran sneaker dan merchandise

Edisi terbatas habis dalam hitungan detik tanpa menjual berlebih satu pasang pun.

Tiket

Kursi ditahan selama beberapa menit saat checkout dan dilepas otomatis jika pembeli pergi.

Pengiriman makanan dan bahan makanan

Slot pengiriman adalah penghitung, dikurangi secara atomik saat pelanggan memesannya.

Bawaan

Yang Anda dapatkan

Penghitung atomik

DECR dan INCR mengubah stok dalam satu langkah tanpa race.

DECRINCRBY

Penahanan yang kedaluwarsa

Reservasi adalah kunci dengan TTL.

SETNXEX

Perlindungan bot

Batas per pelanggan dengan waktu coba lagi yang persis.

GCRA.LIMIT

Serah terima pesanan

Stream untuk pemenuhan, dengan consumer group dan acknowledgement.

XADDXREADGROUP

Pertanyaan umum

Bagaimana penahanan yang kedaluwarsa mengembalikan stok?

Penahanan yang kedaluwarsa dapat diketahui lewat notifikasi keyspace atau sapuan berkala, yang menaikkan penghitung stok lagi.

Bisakah saya memeriksa stok tanpa mengambilnya?

Ya. GET mengembalikan hitungan saat ini. Hanya DECR yang melakukan reservasi.

Bagaimana dengan keranjang multi-item?

Gunakan MULTI dan EXEC, atau sebuah fungsi, untuk mengurangi beberapa penghitung bersamaan.

Kasus penggunaan terkait

Coba pada beban kerja Anda sendiri

HotKV berbicara protokol Redis, jadi Anda dapat mengarahkan klien yang sudah ada ke HotKV dan menjalankan perintah yang sama.