请问各位大牛,如何实现预约系统的数量限制?

来自山卡拉的你 发布于 2018/05/07 21:46
阅读 846
收藏 3

各位大牛,小弟最近在捣鼓一个在线预约系统,但是卡在了预约数量限制这里,比如当天预约额度,或者分时段预约数量额度,额度满了即无法再下单,只能选择其他时间段,现在我不知道怎样才能做到在并发条件下实现,希望各位大牛能给一点提示,谢谢!

加载中
1
yongk
yongk

利用池的概念,根据用户设置的可预约数量n在数据库中生成n条记录,利用数据库的行锁,谁预约到了,那条记录的预约人那列就设置成那个预约到人的id,这个就不能被其他人预约了。

来自山卡拉的你
来自山卡拉的你
目前你这种方案对于我来说更容易实现,而且已经实现了,非常感谢!!!
赵传喜
赵传喜
这个方法机智了,赞一个
来自山卡拉的你
来自山卡拉的你
好的,这个方法也不错,谢谢!
2
laubrence
laubrence
可以考虑redis, key 以天或者小时为纬度value 为额度
来自山卡拉的你
来自山卡拉的你
谢谢,这也是一个不错的建议,我尝试一下
1
sxgkwei
sxgkwei

考虑到可能出现的产品想法多变的情况,交互上你得做3步:

1,界面可设置的增量数字和时间幅度。考虑使用cron表达式定时任务的方式来弄,界面设置好表达式开启任务后,任务内实现到时间了,给数据库特定记录上,增加设置的数字量。

2,在减少时,使用程序语句级别的锁关键字来操作这个减少动作。第一步的增加动作和这个最好用同一个锁方法操作,正负数的差别而已。

3,在具体客户预约时,也调用2中提到的锁方法,都在同一个锁里面操作。操作完成后,分发记录到具体客户订单和总量增减上去。

整体直接使用悲观锁。特别是总量的增减时,一定要使用悲观锁,不然很容易出问题。注意锁是否是对象级的还是静态方法级别的,如果对象级别的,每次操作都新建一个对象去操作锁方法,那锁是没用的。

来自山卡拉的你
来自山卡拉的你
非常感谢详细解答
0
b
bingtel

只用mysql也可以的……条件更新,update XX set cnt = 99 where cnt = 100;

0
0
星汉
星汉

并发的话,最好使用信号量

0
来自山卡拉的你
来自山卡拉的你

谢谢各位,我先尝试一下

0
陈超旗
陈超旗
使用消息队列
来自山卡拉的你
来自山卡拉的你
谢谢!
0
zb1515032746079
zb1515032746079
然后,楼主用了哪一种方案呢?
来自山卡拉的你
来自山卡拉的你
我目前用了楼上yongk的方案,使用池的概念,因为目前使用的是单个mysql数据库,所以在预约的时候利用事务将订单id和预约记录进行绑定,因为目前在开发阶段,不知道实际应用中是否能够真正满足,不过看上去可行哈
返回顶部
顶部