第一种
固定名字入redis数据库,一个一个入库
商品名字IponeX
商品库存:20件
Java代码:
@Log("秒杀商品")
@AuthIgnore
@PostMapping("getGoods")
public String getGoods(String successId) { //抢购成功用户的id
TbSchool tbSchool=new TbSchool();
tbSchool=tbSchoolService.selectById(191); //商品的id
String goodsName=tbSchool.getName(); //商品名字
Integer goodsNum=tbSchool.getType(); //商品库存
//System.out.println("商品名字:"+goodsName+" 商品库存"+goodsNum+"件");
String data="";
//System.out.println(redisTemplate.opsForValue().increment("iponeX", 1));
//increment 会首先检查是否有缓存,如果没有则置0并加1,如果有缓存则累加1
Long num=redisTemplate.opsForValue().increment(goodsName, 1);
//System.out.println(num);
if (num<=goodsNum) { //如果抢购的次数小于等于库存,抢购成功
//抢购成功用户的id会存到Redis数据库中的list类型中
redisTemplate.opsForList().leftPush("success", successId);
data="秒杀成功!还剩"+(goodsNum-num)+"件!";
}else {
data="商品没有货了,请到下一个活动时间再来";
}
return data;
}
第二种
Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java
这种发放需要导入一个jar包
下载地址>>//static.runoob.com/download/jedis-2.9.0.jar
随机生成随机数(相当于用户的唯一信息)入redis数据库
商品名字IponeX
商品库存:40000件
@AuthIgnore
@PostMapping("Jedis")
public R Jedis() {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
//模拟100人请求秒杀(高压力)
TbSchool tbSchool=new TbSchool();
tbSchool=tbSchoolService.selectById(191);
Integer goodsNums=tbSchool.getType(); //商品数量
Random random=new Random();
long startTime=System.currentTimeMillis(); //开始时间
for (int i = 0; i <goodsNums+1; i++) {
int rand=random.nextInt(10000000);
String a=Integer.toString(rand);
if (jedis.llen("success")<goodsNums) {
jedis.rpush("success", a);
System.out.println(a+"用户>>>秒杀成功,还剩"+(goodsNums-jedis.llen("success"))+"件");
}else {
System.out.println("商品没有了,秒杀结束");
}
}
long endTime=System.currentTimeMillis();
System.out.println("活动开始到结束"+(endTime-startTime)+"毫秒");
jedis.close();
System.out.println("已关闭redis");
return R.ok().put("msg","活动结束!!共耗时"+(endTime-startTime)+"毫秒");
}
第三种
左进右出
商品名字IponeX
商品库存:40000件
左进代码:
@Log("左进redis数据库")
@AuthIgnore
@PostMapping("leftIn")
public R leftin() {
Random random=new Random(); //实例化随机类
TbSchool tbSchool=new TbSchool();
tbSchool=tbSchoolService.selectById(191);
Integer goodsNums=tbSchool.getType(); //商品数量
long startTime=System.currentTimeMillis(); //开始时间
for (int i = 0; i < goodsNums+1; i++) { //最后一次秒杀结束效果
int rand=random.nextInt(10000000);
//redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
String a=Integer.toString(rand);
long len=redisTemplate.opsForList().size("success");//长度
if(len<goodsNums) {
redisTemplate.opsForList().leftPush("success", a);
System.out.println(a+"用户>>>秒杀成功,还剩"+(goodsNums-(len+1))+"件");
}else {
System.out.println("商品没有了,秒杀结束");
}
}
long endTime=System.currentTimeMillis(); //结束时间
return R.ok().put("msg","活动结束!!共耗时"+(endTime-startTime)+"毫秒");
}
右出代码:
@Log("右进redis数据库")
@AuthIgnore
@PostMapping("rightGo")
public R rightGo(){
//redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer())
String start="";
long b=redisTemplate.opsForList().size("success");
System.out.println(b);
if(b==0) {
start="数据库没有数据了";
}else {
long startTime=System.currentTimeMillis(); //开始时间
for (int i = 0; i < b; i++) {
String a=(String)redisTemplate.opsForList().rightPop("success");
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.sss");
System.out.println(a+">>>用户出库时间"+simpleDateFormat.format(new Date()));
}
long endTime=System.currentTimeMillis(); //结束时间
start="出库成功,共耗时"+(endTime-startTime)+"毫秒";
}
return R.ok().put("msg",start);
}
出库数据库已经没有了