2022-08-07 22:58:12
基本思路是:锁+幂等性
具体实现:
使用redis的decr (对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。)可以实现原子性的递增递减操作控制优惠码不超送,然后给每个用户维护一个userid+优惠码活动的key保证幂等性,只要redis存在这种key,那就代表已经领取了,具体的优惠码分发可以异步执行。为了避免竞争(同一个用户,多个设备同时领取),参考:
2022-01-05 04:04:37
我参考了这个http://www.cnblogs.com/sunzn/archive/2013/02/13/2910893.html,
用synchronized 去修饰一个静态领券的方法,即使在多线程的时候也能保证,只有一个线程在执行这个方法
嗯,用那个词修饰就能够保证在多线程的时候,同一时间内只有一个线程在调用,所以可以在方法的一开始就判断一下有没有优惠券,再决定是否继续往下执行