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() {
timer('#interval', ${lo});
$("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");
}
}