java如何高并发处理mysql中的有限资源(车票、优惠券等)
nyhyn 2015-12-22 08:56:57 业务场景:
有不同种类的优惠券,用户领取优惠券也有限制,活动期限领或每日限领。
领取过程有以下几个步骤:
1、查询优惠券表cp_info,是否有剩余;
2、查询用户是否已经领取过了,表cp_draw_details中是否有记录(若每日限领,会根据领取时间进行过滤)
3、若可以领取,表cp_draw_details中插入一条记录,表cp_info中更新剩余数量
上午查mysql有行锁和表锁,还有查询时使用for update进行锁定(查询条件的字段是索引字段,才会行锁,否则表锁)。
不清楚java代码中是不是也要加synchronized同步块。
当前是在领取时,将领取过程写在一个synchronized同步块中,知道这样效率十分低,最近也正在考虑如何处理。
有知道如何优化的可以说一下思路。