问题描述
目前我们有一个虚拟卡密提取接口,时常会有高并发请求的情况,每个请求进来后,必须马上返回分配的卡密数据,并标记为已提取。
当遇到高并发时候,就会出现同一卡密发给多人的情况。
问题出现的平台版本及自己尝试过哪些方法
查阅资料后,尝试过flock的文件锁,但是并发上来后,CPU马上跑满了,所有请求都堵死了,根本无法执行下去。
考虑如果使用消息队列的话,虽然能马上完成一次请求,避免重复领取,但是实际的出队和数据库的修改操作都是异步执行了,请求结束后,不能马上得到提取结果,一个提取动作只能分成两个步骤去完成了(效率比较低)
你期待的结果是什么?实际看到的错误信息又是什么?
有没有什么办法,能让每次请求都能得到结果,并且避免重复领取(偶尔出现个别重复是可接受的)简单办法?
利用 Redis 的
Queue
处理即可LPOP
从Redis 获取卡密的 ID,获取失败则证明没卡密了LPOP
是经常用来处理秒杀、抽奖之类场景的