Базові даніЕлектронна комерція

Флеш-розпродажі та запаси

Продавайте рівно стільки, скільки є на складі, коли десять тисяч покупців натискають «Купити» в ту саму секунду, і не пускайте ботів.

зменшення запасів
Атомарне
проданих понад запас одиниць
0
утримання, що знімаються самі
10 хв
Крок 1 з 6
Завантажте запас

У продаж надходить 500 одиниць.

Приклад сесіїplaying
# Завантажте запас
hotkv> SET stock:sneaker-x 500
OK

Анімований покроковий розбір з реальними командами HotKV і прикладами відповідей. Натисніть будь-який крок, щоб перейти до нього. Команди та відповіді залишаються англійською, так само, як ви вводите й бачите їх у HotKV.

Проблема

Під час флеш-розпродажу база даних запасів є вузьким місцем саме тоді, коли це найважливіше. Перевірки за схемою «прочитай, потім запиши» призводять до перепродажу при паралелізмі, покинуті кошики блокують запаси назавжди, а боти скуповують запаси раніше, ніж справжні клієнти встигають завантажити сторінку.

Як це вирішує HotKV

Запас живе в лічильнику, що зменшується атомарно, тож паралельні покупці ніколи не можуть узяти більше, ніж є. Кожне резервування є ключем з десятихвилинним терміном дії, обмеження частоти на клієнта уповільнює ботів, а підтверджені замовлення потрапляють у потік, який виконання обробляє у власному темпі.

Крок за кроком

Що відбувається, команда за командою

  1. 01

    Завантажте запас

    У продаж надходить 500 одиниць.

    SET stock:sneaker-x 500
  2. 02

    Тримайте ботів у межах

    Кожен клієнт може пробувати двічі за 10 секунд. Боти перевищують це одразу.

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

    Візьміть одну одиницю

    DECR атомарний. 10,000 одночасних кліків ніколи не можуть узяти більше 500 одиниць.

    DECR stock:sneaker-x
  4. 04

    Утримуйте десять хвилин

    Резервування спливає само, якщо оформлення покинуто, а прибиральник повертає одиницю назад.

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

    Розпродано обробляється

    Коли DECR опускається нижче нуля, одиницю повертають, а покупець бачить «розпродано». Запас ніколи не лишається від'ємним надовго.

    INCR stock:sneaker-x
  6. 06

    Передайте замовлення на виконання

    Оплачені замовлення додаються до потоку. Система складу опрацьовує їх у власному темпі.

    XADD orders * order 7781 sku sneaker-x customer 42
Де це доречно

Реальні сценарії

Дропи кросівок і мерчу

Обмежені видання розпродаються за секунди, не перепродавши жодної пари.

Продаж квитків

Місця утримуються кілька хвилин під час оформлення й автоматично звільняються, якщо покупець пішов.

Доставка їжі та продуктів

Слоти доставки є лічильниками, що атомарно зменшуються, коли клієнти їх бронюють.

Вбудовано

Що ви отримуєте

Атомарні лічильники

DECR і INCR змінюють запас одним кроком без гонитви.

DECRINCRBY

Утримання, що спливають

Резервування є ключами з TTL.

SETNXEX

Захист від ботів

Ліміти на клієнта з точним часом повтору.

GCRA.LIMIT

Передача замовлень

Потік для виконання, з групами споживачів і підтвердженнями.

XADDXREADGROUP
Довідка:DECRSETGCRA.LIMITXADD

Поширені запитання

Як прострочені утримання повертають запас?

Прострочені утримання можна помітити через сповіщення простору ключів або періодичний обхід, який знову збільшує лічильник запасу.

Чи можна перевірити запас, не забираючи його?

Так. GET повертає поточну кількість. Резервує лише DECR.

А як щодо кошиків із кількома товарами?

Використайте MULTI і EXEC або функцію, щоб зменшити кілька лічильників разом.

Пов'язані сценарії використання

Спробуйте на власному навантаженні

HotKV розмовляє протоколом Redis, тож ви можете направити на нього наявний клієнт і виконувати ті самі команди.