基本思路是:锁+幂等性
具体实现:
使用redis的decr (对key对应的数字做减1 *** 作。如果key不存在,那么在 *** 作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个 *** 作最大支持在64位有符号的整型数字。)可以实现原子性的递增递减 *** 作控制优惠码不超送,然后给每个用户维护一个userid+优惠码活动的key保证幂等性,只要redis存在这种key,那就代表已经领取了,具体的优惠码分发可以异步执行。为了避免竞争(同一个用户,多个设备同时领取),参考:网页链接
Java程序:
import javautilScanner;
public class xll {
public static void main(String[] args) {
int score;
double count = 10;
Scanner input = new Scanner(Systemin);
Systemoutprintln("请输入会员积分:");
score = inputnextInt();
if(score < 2000)
count = 09;
else if(score <4000)
count = 08;
else if(score < 8000)
count = 07;
Systemoutprintln("该会员享受的折扣是:");
Systemoutprintln(count + "折");
}
}
运行测试:
请输入会员积分:
5000
该会员享受的折扣是:
07折
请输入会员积分:
3420
该会员享受的折扣是:
08折
有一问题,如果积分超过8000是几折?
1,批量打折折扣要在001-099间,这个可以用js去验证
2减价不能超过原价这个问题,循环出来的每行都定义一个元素,id=id_+"oldPrice",这样就行了
3然后你就可以获取到每行的原价和减的价格,用js对他们进行比较判断
以上就是关于java程序领取优惠卷,高并发下怎么避免领取量超过预发量全部的内容,包括:java程序领取优惠卷,高并发下怎么避免领取量超过预发量、JAVA 大家帮忙看一下怎么做 会员积分x x<2000 (9折) 2000<=x<4000 (8折) 4000<=x<8000(7折)、java怎么做批量打折,批量减价的页面验证(批量打折折扣要在0.01-0.99间,减价不能超过原价)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)