redis抢购秒杀(单件商品)(倒计时)(十四)

15 篇文章 0 订阅

redis数据准备 举例:商品Id为1001的是iphonexsmax 预备在2019年8月12号中午12:00:00,免费赠送 100台 商品id 1001 库存 100 三个key value

1:记录着该商品的抢购开始时间的

goods:data:+商品Id value(string) 该商品id对应的goodsVO类对象 开始抢购时间 价格 商品预览图 url

tring key = "goods:data" + 11;

		int id = 11;

		Goods goods = goodsService.selectByPrimaryKey(11);
		GoodsVo goodsVo = new GoodsVo();
		goodsVo.setGoods(goods);

		Date date = sdf.parse("20190812175050");

		goodsVo.setNowDate(date);

		byte[] bytes = jedis.getHashValueSerializer().serialize(goodsVo);
		jedis.boundValueOps(key).set(bytes);

2:该商品对应的库存序号 kill:list:+商品id list

	 String key = "kill:list:11";
		 for (int i = 1; i <= 100; i++) {
		 jedis.opsForList().rightPush(key, i);
		 }
		

3:存放该商品已抢购成功的用户名单的集合 kill:users:+商品id set

jedis.opsForSet().add(userKey, goodsId);

前端

<script type="text/javascript">

function timer(idName, intDiff) {
		window.setInterval(function() {
			var day = 0, hour = 0, minute = 0, second = 0; //时间默认值     
			if (intDiff > 0) {
				day = Math.floor(intDiff / (60 * 60 * 24));
				hour = Math.floor(intDiff / (60 * 60)) - (day * 24);
				minute = Math.floor(intDiff / 60) - (day * 24 * 60)
						- (hour * 60);
				second = Math.floor(intDiff) - (day * 24 * 60 * 60)
						- (hour * 60 * 60) - (minute * 60);
			}
			if (minute <= 9)
				minute = '0' + minute;
			if (second <= 9)
				second = '0' + second;
			$(idName + ' .day_show').html(day + "天");
			$(idName + ' .hour_show').html('<s id="h"></s>' + hour + '时');
			$(idName + ' .minute_show').html('<s></s>' + minute + '分');
			$(idName + ' .second_show').html('<s></s>' + second + '秒');
			intDiff--;
		}, 1000);
	}

	$(function() {
		//开始抢购时间-系统当前时间的秒数 就是senconds这个变量的值
		timer('#interval', ${lo});

		//ajax
		$("button[class='qianggou']").click(function(){
			var tian=$("span[class='day_show']").html();	
			var shi=$("span[class='hour_show']").html();
			var fen=$("span[class='minute_show']").html();
			var miao=$("span[class='second_show']").html();
			alert(tian==shi==fen==miao=='0');
			
				$.ajax({
					url:"${pageContext.request.contextPath}/goods/doGoodsQg",
					
					type:"post",
					contentType:"application/json;charset=utf-8",
					dataType:"json",
					success:function(data){
						 if(data=='1'){
							 alert("抢购成功");
						 }else if(data=='3'){
							 alert("未到抢购时间");
						 }else{
							 alert("抢购失败");
						 }
						
        			}
				});
			
			
	
	
		});
		
	});

</script>

后端

@RequestMapping("/doGoodsQg")
	public void qg(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String key1 = "kill:list:11";
		String goodsId = "11";
		String userKey = "kill:users:" + goodsId;
		String userId = "105";
		String key = "goods:data" + 11;

		byte[] byts = (byte[]) jedis.opsForValue().get(key);

		GoodsVo goodsVo1 = (GoodsVo) jedis.getHashValueSerializer().deserialize(byts);
		Long size = jedis.opsForList().size(key1);
		goodsVo1.setAvaliableCount(size + "");

		Date date1 = goodsVo1.getNowDate();
		Date date2 = new Date();
		String date11 = sdf.format(date1);
		String date22 = sdf.format(date2);
		Date datee = sdf.parse(date11);
		Date dateee = sdf.parse(date22);
		long time1 = datee.getTime();
		long time2 = dateee.getTime();
		long lo = (time1 - time2);
		if (lo == 0) {

			if (jedis.opsForList().size(key1) != 0) {
				if (!jedis.opsForSet().isMember(userKey, goodsId)) {
					Integer xuhao = (Integer) jedis.opsForList().rightPop(key1);
					if (xuhao != null) {
						jedis.opsForSet().add(userKey, goodsId);
						System.out.println("抢购成功" + xuhao);
						response.getWriter().write("1");
					} else {
						System.out.println("抢购失败");
						response.getWriter().write("0");
					}
				}
			}
		} else {
			response.getWriter().write("3");
		}

	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值