通用券抢券的优化过程.

本文讲述了通用券抢券过程的优化,包括内存中维护券库存,减少数据库查询,但面临并发时导致的库存分配不均问题。通过内存排序任务改善了性能,最终在高并发下提高了TPS并降低了RT。
摘要由CSDN通过智能技术生成

目前运销平台的券分为通用券和非通用券.

通用券就是说,每张券可以重复使用. 非通用券就是说只能使用一次的券.

举个非通用券的例子:

给了100张券,没张券使用1次. 一个订单可以有1~9个乘机人,那么分配给订单时,就给订单从10张中抽取(1~9)张券就好了.这个很好理解.

举个通用券的例子:

给了9种通用券,每种券可以使用100次,那么一个带有5个乘机人的订单来了,那么应该从9种券里取5种券返回给订单.同时,把这5种券的库存-1.

本次优化的主要是通用券.

目前取券的逻辑是: 

接到订单请求后,去数据库里查询可用的通用券,查询sql如下:

SELECT * FROM activity_common_voucher a1  WHERE reuse_count>=1 AND DATEDIFF(publish_date, NOW())=0 AND act_id = #actId# ORDER BY reuse_count DESC LIMIT #size#

上面的reuse_count就是通用券的库存.

activity_common_voucher 表的索引如下:

primary:id

act_publish_idx: act_id,publish_date,voucher_code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值