有一个用券逻辑,券有金额/剩余金额属性。并发场景有很多请求使用同一张券,我用到了 select for update 的方式进行锁券,当一个请求消耗完券之后,update 记录(券剩余金额),然后会释放锁,下一个请求再继续用券。 但现在同一张券,券金额比较大且并发场景的情况下,某些请求耗时会比较长,因为等待锁释放 请教下,这里有什么优化点么,合并请求之类的改动太大,需要上游配合 我说的场景是类似那种后付费的场景,会定时扣费,所以会有同一个用户同一张券并发使用的情况
1 、内存队列(或者 MQ ),排队对单券扣减,减少无畏的 CPU 消耗、加解锁消耗 2 、使用 Redis 的 decrby 进行扣减,通过内存扣减提升性能 3 、如果是多次的金额相同,还可以使用券预置拆分策略,减少锁竞争